pax_global_header00006660000000000000000000000064141027573230014516gustar00rootroot0000000000000052 comment=b7a3f58df44d20d133ea3ddafec9bf7a08647e89 calamares-3.2.41.1/000077500000000000000000000000001410275732300136745ustar00rootroot00000000000000calamares-3.2.41.1/.clang-format000066400000000000000000000017571410275732300162610ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- BasedOnStyle: WebKit AlignAfterOpenBracket: Align AlignEscapedNewlines: DontAlign AllowAllParametersOfDeclarationOnNextLine: "false" AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: "false" AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: "false" AlwaysBreakAfterReturnType: TopLevelDefinitions AlwaysBreakTemplateDeclarations: Yes BinPackArguments: "false" BinPackParameters: "false" BreakBeforeBraces: Allman BreakBeforeTernaryOperators: "true" BreakConstructorInitializers: BeforeComma ColumnLimit: 120 Cpp11BracedListStyle: "false" FixNamespaceComments: "true" IncludeBlocks: Preserve IndentWidth: "4" MaxEmptyLinesToKeep: "2" NamespaceIndentation: None PointerAlignment: Left ReflowComments: "false" SortIncludes: "true" SpaceAfterCStyleCast: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" Standard: Cpp11 calamares-3.2.41.1/.clang-format.base000066400000000000000000000017571410275732300171720ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- BasedOnStyle: WebKit AlignAfterOpenBracket: Align AlignEscapedNewlines: DontAlign AllowAllParametersOfDeclarationOnNextLine: "false" AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: "false" AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: "false" AlwaysBreakAfterReturnType: TopLevelDefinitions AlwaysBreakTemplateDeclarations: Yes BinPackArguments: "false" BinPackParameters: "false" BreakBeforeBraces: Allman BreakBeforeTernaryOperators: "true" BreakConstructorInitializers: BeforeComma ColumnLimit: 120 Cpp11BracedListStyle: "false" FixNamespaceComments: "true" IncludeBlocks: Preserve IndentWidth: "4" MaxEmptyLinesToKeep: "2" NamespaceIndentation: None PointerAlignment: Left ReflowComments: "false" SortIncludes: "true" SpaceAfterCStyleCast: "false" SpacesBeforeTrailingComments: "2" SpacesInAngles: "true" SpacesInParentheses: "true" SpacesInSquareBrackets: "true" Standard: Cpp11 calamares-3.2.41.1/.reuse/000077500000000000000000000000001410275732300150755ustar00rootroot00000000000000calamares-3.2.41.1/.reuse/dep5000066400000000000000000000046431410275732300156640ustar00rootroot00000000000000Format: 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 calamares-3.2.41.1/3rdparty/000077500000000000000000000000001410275732300154445ustar00rootroot00000000000000calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/000077500000000000000000000000001410275732300225135ustar00rootroot00000000000000calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/LICENSE.LGPL.txt000066400000000000000000000621261410275732300251020ustar00rootroot00000000000000 The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. You may use, distribute and copy the KD Tools Library under the terms of GNU Library General Public License version 2, which is displayed below. ------------------------------------------------------------------------- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 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. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] 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 Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 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 a program 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. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, 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 companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. 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, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library 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 compile 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) 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. c) 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. d) 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 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. 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 to 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 Library 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.cpp000066400000000000000000000314061410275732300310240ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdlockedsharedmemorypointer.h" #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #ifndef QT_NO_SHAREDMEMORY namespace kdtools { } using namespace kdtools; KDLockedSharedMemoryPointerBase::KDLockedSharedMemoryPointerBase( QSharedMemory * m ) : locker( m ), mem( m ) { } KDLockedSharedMemoryPointerBase::KDLockedSharedMemoryPointerBase( QSharedMemory & m ) : locker( &m ), mem( &m ) { } KDLockedSharedMemoryPointerBase::~KDLockedSharedMemoryPointerBase() {} void * KDLockedSharedMemoryPointerBase::get() { return mem ? mem->data() : 0 ; } const void * KDLockedSharedMemoryPointerBase::get() const { return mem ? mem->data() : 0 ; } size_t KDLockedSharedMemoryPointerBase::byteSize() const { return mem ? mem->size() : 0; } /*! \class KDLockedSharedMemoryPointer \ingroup core raii smartptr \brief Locking pointer for Qt shared memory segments \since_c 2.1 (The exception safety of this class has not been evaluated yet.) KDLockedSharedMemoryPointer is a smart immutable pointer, which gives convenient and safe access to a QSharedMemory data segment. The content of a KDLockedSharedMemoryPointer cannot be changed during it's lifetime. You can use this class like a normal pointer to the shared memory segment and be sure it's locked while accessing it. \note You can only put simple types/structs/classes into it. structs and classes shall not contain any other pointers. See the documentation of QSharedMemory for details. */ /*! \fn KDLockedSharedMemoryPointer::KDLockedSharedMemoryPointer( QSharedMemory * mem ) Constructor. Constructs a KDLockedSharedMemory pointer which points to the data segment of \a mem. The constructor locks \a mem. If the memory segment is already locked by another process, this constructor blocks until the lock is released. \post data() == mem->data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryPointer::KDLockedSharedMemoryPointer( QSharedMemory & mem ) \overload \post data() == mem.data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryPointer::~KDLockedSharedMemoryPointer() Destructor. Unlocks the shared memory segment. \post The shared memory segment has been unlocked */ /*! \fn T * KDLockedSharedMemoryPointer::get() \returns a pointer to the contained object. */ /*! \fn const T * KDLockedSharedMemoryPointer::get() const \returns a const pointer to the contained object \overload */ /*! \fn T * KDLockedSharedMemoryPointer::data() Equivalent to get(), provided for consistency with Qt naming conventions. */ /*! \fn const T * KDLockedSharedMemoryPointer::data() const \overload */ /*! \fn T & KDLockedSharedMemoryPointer::operator*() Dereference operator. Returns \link get() *get()\endlink. */ /*! \fn const T & KDLockedSharedMemoryPointer::operator*() const Dereference operator. Returns \link get() *get()\endlink. \overload */ /*! \fn T * KDLockedSharedMemoryPointer::operator->() Member-by-pointer operator. Returns get(). */ /*! \fn const T * KDLockedSharedMemoryPointer::operator->() const Member-by-pointer operator. Returns get(). \overload */ /*! \class KDLockedSharedMemoryArray \ingroup core raii smartptr \brief Locking array pointer to Qt shared memory segments \since_c 2.1 (The exception safety of this class has not been evaluated yet.) KDLockedSharedMemoryArray is a smart immutable pointer, which gives convenient and safe access to array data stored in a QSharedMemory data segment. The content of a KDLockedSharedMemoryArray cannot be changed during it's lifetime. You can use this class like a normal pointer to the shared memory segment and be sure it's locked while accessing it. \note You can only put arrays of simple types/structs/classes into it. structs and classes shall not contain any other pointers. See the documentation of QSharedMemory for details. \sa KDLockedSharedMemoryPointer */ /*! \fn KDLockedSharedMemoryArray::KDLockedSharedMemoryArray( QSharedMemory* mem ) Constructor. Constructs a KDLockedSharedMemoryArray which points to the data segment of \a mem. The constructor locks \a mem. If the memory segment is already locked by another process, this constructor blocks until the lock is release. \post get() == mem->data() and the memory segment has been locked */ /*! \fn KDLockedSharedMemoryArray::KDLockedSharedMemoryArray( QSharedMemory& mem ) \overload \post get() == mem->data() and the memory segment has been locked */ /*! \typedef KDLockedSharedMemoryArray::size_type Typedef for std::size_t. Provided for STL compatibility. */ /*! \typedef KDLockedSharedMemoryArray::difference_type Typedef for std::ptrdiff_t. Provided for STL compatibility. */ /*! \typedef KDLockedSharedMemoryArray::iterator Typedef for T*. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::const_iterator Typedef for const T*. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::reverse_iterator Typedef for std::reverse_iterator< \link KDLockedSharedMemoryArray::iterator iterator\endlink >. Provided for STL compatibility. \since_t 2.2 */ /*! \typedef KDLockedSharedMemoryArray::const_reverse_iterator Typedef for std::reverse_iterator< \link KDLockedSharedMemoryArray::const_iterator const_iterator\endlink >. Provided for STL compatibility. \since_t 2.2 */ /*! \fn KDLockedSharedMemoryArray::iterator KDLockedSharedMemoryArray::begin() Returns an \link KDLockedSharedMemoryArray::iterator iterator\endlink pointing to the first item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_iterator KDLockedSharedMemoryArray::begin() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::iterator KDLockedSharedMemoryArray::end() Returns an \link KDLockedSharedMemoryArray::iterator iterator\endlink pointing to the item after the last item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_iterator KDLockedSharedMemoryArray::end() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::reverse_iterator KDLockedSharedMemoryArray::rbegin() Returns an \link KDLockedSharedMemoryArray::reverse_iterator reverse_iterator\endlink pointing to the item after the last item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_reverse_iterator KDLockedSharedMemoryArray::rbegin() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::reverse_iterator KDLockedSharedMemoryArray::rend() Returns an \link KDLockedSharedMemoryArray::reverse_iterator reverse_iterator\endlink pointing to the first item of the array. \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::const_reverse_iterator KDLockedSharedMemoryArray::rend() const \overload \since_f 2.2 */ /*! \fn KDLockedSharedMemoryArray::size_type KDLockedSharedMemoryArray::size() const Returns the size of this array. The size is calculated from the storage size of T and the size of the shared memory segment. \since_f 2.2 */ /*! \fn T& KDLockedSharedMemoryArray::operator[]( difference_type n ) Array access operator. Returns a reference to the item at index position \a n. */ /*! \fn const T& KDLockedSharedMemoryArray::operator[]( difference_type n ) const \overload */ /*! \fn T& KDLockedSharedMemoryArray::front() Returns a reference to the first item in the array. This is the same as operator[](0). */ /*! \fn const T& KDLockedSharedMemoryArray::front() const \overload */ /*! \fn T& KDLockedSharedMemoryArray::back() Returns a reference to the last item in the array. This is the same as operator[](size()-1). \since_f 2.2 */ /*! \fn const T& KDLockedSharedMemoryArray::back() const \overload \since_f 2.2 */ #ifdef eKDTOOLSCORE_UNITTESTS #include #include #include namespace { struct TestStruct { TestStruct( uint nn = 0 ) : n( nn ), f( 0.0 ), c( '\0' ), b( false ) { } uint n; double f; char c; bool b; }; bool operator==( const TestStruct& lhs, const TestStruct& rhs ) { return lhs.n == rhs.n && lhs.f == rhs.f && lhs.c == rhs.c && lhs.b == rhs.b; } class TestThread : public QThread { public: TestThread( const QString& key ) : mem( key ) { mem.attach(); } void run() { while( true ) { msleep( 100 ); kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); if( !p->b ) continue; p->n = 5; p->f = 3.14; p->c = 'A'; p->b = false; return; } } QSharedMemory mem; }; bool isConst( TestStruct* ) { return false; } bool isConst( const TestStruct* ) { return true; } } KDAB_UNITTEST_SIMPLE( KDLockedSharedMemoryPointer, "kdcoretools" ) { const QString key = QUuid::createUuid(); QSharedMemory mem( key ); const bool created = mem.create( sizeof( TestStruct ) ); assertTrue( created ); if ( !created ) return; // don't execute tests if shm coulnd't be created // On Windows, shared mem is only available in increments of page // size (4k), so don't fail if the segment is larger: const unsigned long mem_size = mem.size(); assertGreaterOrEqual( mem_size, sizeof( TestStruct ) ); { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertTrue( p ); *p = TestStruct(); assertEqual( p->n, 0u ); assertEqual( p->f, 0.0 ); assertEqual( p->c, '\0' ); assertFalse( p->b ); } { TestThread thread( key ); assertEqual( thread.mem.key().toStdString(), key.toStdString() ); assertEqual( static_cast< unsigned long >( thread.mem.size() ), mem_size ); thread.start(); assertTrue( thread.isRunning() ); thread.wait( 2000 ); assertTrue( thread.isRunning() ); { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); p->b = true; } thread.wait( 2000 ); assertFalse( thread.isRunning() ); } { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertEqual( p->n, 5u ); assertEqual( p->f, 3.14 ); assertEqual( p->c, 'A' ); assertFalse( p->b ); } { kdtools::KDLockedSharedMemoryPointer< TestStruct > p( mem ); assertEqual( mem.data(), p.get() ); assertEqual( p.get(), p.operator->() ); assertEqual( p.get(), &(*p) ); assertEqual( p.get(), p.data() ); assertFalse( isConst( p.get() ) ); } { const kdtools::KDLockedSharedMemoryPointer< TestStruct > p( &mem ); assertEqual( mem.data(), p.get() ); assertEqual( p.get(), p.operator->() ); assertEqual( p.get(), &(*p) ); assertEqual( p.get(), p.data() ); assertTrue( isConst( p.get() ) ); } { QSharedMemory mem2( key + key ); const bool created2 = mem2.create( 16 * sizeof( TestStruct ) ); assertTrue( created2 ); if ( !created2 ) return; // don't execute tests if shm coulnd't be created kdtools::KDLockedSharedMemoryArray a( mem2 ); assertTrue( a ); assertEqual( a.get(), mem2.data() ); assertEqual( &a[0], a.get() ); a[1] = a[0]; assertTrue( a[0] == a[1] ); TestStruct ts; ts.n = 5; ts.f = 3.14; a[0] = ts; assertFalse( a[0] == a[1] ); assertEqual( a.front().n, ts.n ); assertEqual( a[0].f, ts.f ); a[0].n = 10; assertEqual( a.front().n, 10u ); ts = a[0]; assertEqual( ts.n, 10u ); std::vector< TestStruct > v; for( uint i = 0; i < a.size(); ++i ) v.push_back( TestStruct( i ) ); std::copy( v.begin(), v.end(), a.begin() ); for( uint i = 0; i < a.size(); ++i ) assertEqual( a[ i ].n, i ); assertEqual( a.front().n, 0u ); assertEqual( a.back().n, a.size() - 1 ); std::copy( v.begin(), v.end(), a.rbegin() ); for( uint i = 0; i < a.size(); ++i ) assertEqual( a[ i ].n, a.size() - 1 - i ); assertEqual( a.front().n, a.size() - 1 ); assertEqual( a.back().n, 0u ); } } #endif // KDTOOLSCORE_UNITTESTS #endif // QT_NO_SHAREDMEMORY #endif // QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdlockedsharedmemorypointer.h000066400000000000000000000102231410275732300304630ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ #define __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ #include #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #ifndef QT_NO_SHAREDMEMORY #include "kdsharedmemorylocker.h" #include #include #ifndef DOXYGEN_RUN namespace kdtools { #endif class KDLockedSharedMemoryPointerBase { protected: explicit KDLockedSharedMemoryPointerBase( QSharedMemory * mem ); explicit KDLockedSharedMemoryPointerBase( QSharedMemory & mem ); ~KDLockedSharedMemoryPointerBase(); // PENDING(marc) do we really want const propagation here? I // usually declare all my RAII objects const... void * get(); const void * get() const; KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( get() ) size_t byteSize() const; private: KDSharedMemoryLocker locker; QSharedMemory * const mem; }; template< typename T> class MAKEINCLUDES_EXPORT KDLockedSharedMemoryPointer : KDLockedSharedMemoryPointerBase { KDAB_DISABLE_COPY( KDLockedSharedMemoryPointer ); public: explicit KDLockedSharedMemoryPointer( QSharedMemory * m ) : KDLockedSharedMemoryPointerBase( m ) {} explicit KDLockedSharedMemoryPointer( QSharedMemory & m ) : KDLockedSharedMemoryPointerBase( m ) {} T * get() { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } const T * get() const { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } T * data() { return static_cast( get() ); } const T * data() const { return static_cast( get() ); } T & operator*() { assert( get() ); return *get(); } const T & operator*() const { assert( get() ); return *get(); } T * operator->() { return get(); } const T * operator->() const { return get(); } KDAB_USING_SAFE_BOOL_OPERATOR( KDLockedSharedMemoryPointerBase ) }; template class MAKEINCLUDES_EXPORT KDLockedSharedMemoryArray : KDLockedSharedMemoryPointerBase { KDAB_DISABLE_COPY( KDLockedSharedMemoryArray ); public: explicit KDLockedSharedMemoryArray( QSharedMemory * m ) : KDLockedSharedMemoryPointerBase( m ) {} explicit KDLockedSharedMemoryArray( QSharedMemory & m ) : KDLockedSharedMemoryPointerBase( m ) {} typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; typedef T* iterator; typedef const T* const_iterator; typedef std::reverse_iterator< const_iterator > const_reverse_iterator; typedef std::reverse_iterator< iterator > reverse_iterator; iterator begin() { return get(); } const_iterator begin() const { return get(); } iterator end() { return begin() + size(); } const_iterator end() const { return begin() + size(); } reverse_iterator rbegin() { return reverse_iterator( end() ); } const_reverse_iterator rbegin() const { return reverse_iterator( end() ); } reverse_iterator rend() { return reverse_iterator( begin() ); } const_reverse_iterator rend() const { return const_reverse_iterator( begin() ); } size_type size() const { return byteSize() / sizeof( T ); } T * get() { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } const T * get() const { return static_cast( KDLockedSharedMemoryPointerBase::get() ); } T & operator[]( difference_type n ) { assert( get() ); return *(get()+n); } const T & operator[]( difference_type n ) const { assert( get() ); return *(get()+n); } T & front() { assert( get() ); return *get(); } const T & front() const { assert( get() ); return *get(); } T & back() { assert( get() ); return *( get() + size() - 1 ); } const T & back() const { assert( get() ); return *( get() + size() - 1 ); } KDAB_USING_SAFE_BOOL_OPERATOR( KDLockedSharedMemoryPointerBase ) }; #ifndef DOXYGEN_RUN } #endif #endif /* QT_NO_SHAREDMEMORY */ #endif /* QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) */ #endif /* __KDTOOLS__CORE__KDLOCKEDSHAREDMEMORYPOINTER_H__ */ calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.cpp000066400000000000000000000021171410275732300274360ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdsharedmemorylocker.h" #if QT_VERSION >= 0x040400 || defined( DOXYGEN_RUN ) #include using namespace kdtools; /*! \class KDSharedMemoryLocker \ingroup raii core \brief Exception-safe and convenient wrapper around QSharedMemory::lock() */ /** * Constructor. Locks the shared memory segment \a mem. * If another process has locking the segment, this constructor blocks * until the lock is released. The memory segments needs to be properly created or attached. */ KDSharedMemoryLocker::KDSharedMemoryLocker( QSharedMemory* mem ) : mem( mem ) { mem->lock(); } /** * Destructor. Unlocks the shared memory segment associated with this * KDSharedMemoryLocker. */ KDSharedMemoryLocker::~KDSharedMemoryLocker() { mem->unlock(); } #ifdef KDAB_EVAL #include KDAB_EVAL static const EvalDialogChecker evalChecker( "KD Tools", false ); #endif #endif calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdsharedmemorylocker.h000066400000000000000000000014751410275732300271110ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef __KDTOOLS__CORE__KDSHAREDMEMORYLOCKER_H #define __KDTOOLS__CORE__KDSHAREDMEMORYLOCKER_H #include "kdtoolsglobal.h" #if QT_VERSION < 0x040400 && !defined( DOXYGEN_RUN ) #ifdef Q_CC_GNU #warning "Can't use KDTools KDSharedMemoryLocker with Qt versions prior to 4.4" #endif #else class QSharedMemory; #ifndef DOXYGEN_RUN namespace kdtools { #endif class KDTOOLSCORE_EXPORT KDSharedMemoryLocker { Q_DISABLE_COPY( KDSharedMemoryLocker ) public: KDSharedMemoryLocker( QSharedMemory* mem ); ~KDSharedMemoryLocker(); private: QSharedMemory* const mem; }; #ifndef DOXYGEN_RUN } #endif #endif #endif calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.cpp000066400000000000000000001144751410275732300303020ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdsingleapplicationguard.h" #if QT_VERSION >= 0x040400 || defined(DOXYGEN_RUN) #ifndef QT_NO_SHAREDMEMORY #include "kdsharedmemorylocker.h" #include "kdlockedsharedmemorypointer.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifndef Q_WS_WIN #include #include #endif #ifdef Q_WS_WIN #include #ifndef _SSIZE_T_DEFINED typedef signed int ssize_t; #endif #endif using namespace kdtools; #ifndef KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS #define KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS 10 #endif #ifndef KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES #define KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES 10 #endif #ifndef KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE #define KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE 32768 #endif static unsigned int KDSINGLEAPPLICATIONGUARD_SHM_VERSION = 0; Q_GLOBAL_STATIC_WITH_ARGS( int, registerInstanceType, (qRegisterMetaType()) ) /*! \class KDSingleApplicationGuard::Instance \relates KDSingleApplicationGuard \ingroup core \brief Information about instances a KDSingleApplicationGuard knows about Instance represents instances of applications under KDSingleApplicationGuard protection, and allows access to their pid() and the arguments() they were started with. */ class KDSingleApplicationGuard::Instance::Private : public QSharedData { friend class ::KDSingleApplicationGuard::Instance; public: Private( const QStringList & args, bool truncated, qint64 pid ) : pid( pid ), arguments( args ), truncated( truncated ) {} private: qint64 pid; QStringList arguments; bool truncated; }; struct ProcessInfo; /*! \internal */ class KDSingleApplicationGuard::Private { friend class ::KDSingleApplicationGuard; friend class ::KDSingleApplicationGuard::Instance; friend struct ::ProcessInfo; KDSingleApplicationGuard * const q; public: Private( Policy policy, KDSingleApplicationGuard* qq ); ~Private(); void create( const QStringList& arguments ); bool checkOperational( const char * function, const char * act ) const; bool checkOperationalPrimary( const char * function, const char * act ) const; struct segmentheader { size_t size : 16; }; static void sharedmem_free( char* ); static char* sharedmem_malloc( size_t size ); private: void shutdownInstance(); void poll(); private: static KDSingleApplicationGuard* primaryInstance; private: QBasicTimer timer; QSharedMemory mem; int id; Policy policy; bool operational; bool exitRequested; }; /*! \internal */ KDSingleApplicationGuard::Instance::Instance( const QStringList & args, bool truncated, qint64 p ) : d( new Private( args, truncated, p ) ) { d->ref.ref(); (void)registerInstanceType(); } /*! Default constructor. Constructs in Instance that is \link isNull() null\endlink. \sa isNull() */ KDSingleApplicationGuard::Instance::Instance() : d( 0 ) {} /*! Copy constructor. */ KDSingleApplicationGuard::Instance::Instance( const Instance & other ) : d( other.d ) { if ( d ) d->ref.ref(); } /*! Destructor. */ KDSingleApplicationGuard::Instance::~Instance() { if ( d && !d->ref.deref() ) delete d; } /*! \fn KDSingleApplicationGuard::Instance::swap( Instance & other ) Swaps the contents of this and \a other. This function never throws exceptions. */ /*! \fn KDSingleApplicationGuard::Instance::operator=( Instance other ) Assigns the contents of \a other to this. This function is strongly exception-safe. */ /*! \fn std::swap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) \relates KDSingleApplicationGuard::Instance Specialisation of std::swap() for KDSingleApplicationGuard::Instance. Calls swap(). */ /*! \fn qSwap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) \relates KDSingleApplicationGuard::Instance Specialisation of qSwap() for KDSingleApplicationGuard::Instance. Calls swap(). */ /*! \fn KDSingleApplicationGuard::Instance::isNull() const Returns whether this instance is null. */ /*! Returns whether this instance is valid. A valid instance is neither null, nor does it have a negative PID. */ bool KDSingleApplicationGuard::Instance::isValid() const { return d && d->pid >= 0 ; } /*! Returns whether the #arguments are complete (\c false) or not (\c true), e.g. because they have been truncated due to limited storage space. \sa arguments() */ bool KDSingleApplicationGuard::Instance::areArgumentsTruncated() const { return d && d->truncated; } /*! Returns the arguments that this instance was started with. \sa areArgumentsTruncated() */ const QStringList & KDSingleApplicationGuard::Instance::arguments() const { if ( d ) return d->arguments; static const QStringList empty; return empty; } /*! Returns the process-id (PID) of this instance. */ qint64 KDSingleApplicationGuard::Instance::pid() const { if ( d ) return d->pid; else return -1; } /*! \class KDSingleApplicationGuard KDSingleApplicationGuard \ingroup core \brief A guard to protect an application from having several instances. KDSingleApplicationGuard can be used to make sure only one instance of an application is running at the same time. \note As KDSingleApplicationGuard currently uses QSharedMemory, Qt 4.4 or later is required. */ /*! \fn void KDSingleApplicationGuard::instanceStarted(const KDSingleApplicationGuard::Instance & instance) This signal is emitted by the primary instance whenever another instance \a instance started. */ /*! \fn void KDSingleApplicationGuard::instanceExited(const KDSingleApplicationGuard::Instance & instance) This signal is emitted by the primary instance whenever another instance \a instance exited. */ /*! \fn void KDSingleApplicationGuard::raiseRequested() This signal is emitted when the current running application is requested to raise its main window. */ /*! \fn void KDSingleApplicationGuard::exitRequested() This signal is emitted when the current running application has been asked to exit by calling kill on the instance. */ /*! \fn void KDSingleApplicationGuard::becamePrimaryInstance() This signal is emitted when the current running application becomes the new primary application. The old primary application has quit. */ /*! \fn void KDSingleApplicationGuard::becameSecondaryInstance() This signal is emmited when the primary instance became secondary instance. This happens when the instance doesn't update its status for some (default 10) seconds. Another instance got primary instance in that case. */ /*! \fn void KDSingleApplicationGuard::policyChanged( KDSingleApplicationGuard::Policy policy ) This signal is emitted when the #policy of the system changes. */ enum Command { NoCommand = 0x00, ExitedInstance = 0x01, NewInstance = 0x02, FreeInstance = 0x04, ShutDownCommand = 0x08, KillCommand = 0x10, BecomePrimaryCommand = 0x20, RaiseCommand = 0x40 }; static const quint16 PrematureEndOfOptions = -1; static const quint16 RegularEndOfOptions = -2; struct ProcessInfo { static const size_t MarkerSize = sizeof(quint16); explicit ProcessInfo( Command c = FreeInstance, const QStringList& arguments = QStringList(), qint64 p = -1 ) : pid( p ), command( c ), timestamp( 0 ), commandline( 0 ) { setArguments( arguments ); } void setArguments( const QStringList & arguments ); QStringList arguments( bool * prematureEnd ) const; qint64 pid; quint32 command; quint32 timestamp; char* commandline; }; static inline bool operator==( const ProcessInfo & lhs, const ProcessInfo & rhs ) { return lhs.command == rhs.command && ( lhs.commandline == rhs.commandline || ( lhs.commandline != 0 && rhs.commandline != 0 && ::strcmp( lhs.commandline, rhs.commandline ) == 0 ) ); } static inline bool operator!=( const ProcessInfo & lhs, const ProcessInfo & rhs ) { return !operator==( lhs, rhs ); } /*! This struct contains information about the managed process system. \internal */ struct InstanceRegister { explicit InstanceRegister( KDSingleApplicationGuard::Policy policy = KDSingleApplicationGuard::NoPolicy ) : policy( policy ), maxInstances( KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES ), version( 0 ) { std::fill_n( commandLines, KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE, 0 ); ::memcpy( magicCookie, "kdsingleapp", 12 ); } /*! Returns whether this register was properly initialized by the first instance. */ bool isValid() const { return ::strcmp( magicCookie, "kdsingleapp" ) == 0; } char magicCookie[ 12 ]; unsigned int policy : 8; quint32 maxInstances : 20; unsigned int version : 4; ProcessInfo info[ KDSINGLEAPPLICATIONGUARD_NUMBER_OF_PROCESSES ]; char commandLines[ KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE ]; Q_DISABLE_COPY( InstanceRegister ) }; void ProcessInfo::setArguments( const QStringList & arguments ) { if( commandline != 0 ) KDSingleApplicationGuard::Private::sharedmem_free( commandline ); commandline = 0; if( arguments.isEmpty() ) return; size_t totalsize = MarkerSize; for ( const QString& arg : arguments ) { const QByteArray utf8 = arg.toUtf8(); totalsize += utf8.size() + MarkerSize; } InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); this->commandline = KDSingleApplicationGuard::Private::sharedmem_malloc( totalsize ); if( this->commandline == 0 ) { qWarning("KDSingleApplicationguard: out of memory when trying to save arguments.\n"); return; } char* const commandline = this->commandline + reinterpret_cast(reg->commandLines); int argpos = 0; for ( const QString & arg : arguments ) { const QByteArray utf8 = arg.toUtf8(); const int required = MarkerSize + utf8.size() + MarkerSize ; const int available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos ; if ( required > available || utf8.size() > std::numeric_limits::max() ) { // write a premature-eoo marker, and quit memcpy( commandline + argpos, &PrematureEndOfOptions, MarkerSize ); argpos += MarkerSize; qWarning( "KDSingleApplicationGuard: argument list is too long (bytes required: %d, used: %d, available: %d", required, argpos - 2, available ); return; } else { const quint16 len16 = utf8.size(); // write the size of the data... memcpy( commandline + argpos, &len16, MarkerSize ); argpos += MarkerSize; // then the data memcpy( commandline + argpos, utf8.data(), len16 ); argpos += len16; } } const ssize_t available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos; assert( available >= static_cast( MarkerSize ) ); memcpy( commandline + argpos, &RegularEndOfOptions, MarkerSize ); argpos += MarkerSize; } QStringList ProcessInfo::arguments( bool * prematureEnd ) const { QStringList result; if( commandline == 0 ) { if( prematureEnd ) *prematureEnd = true; return result; } InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); const char* const commandline = this->commandline + reinterpret_cast(reg->commandLines); int argpos = 0; while ( true ) { const int available = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE - argpos ; assert( available >= 2 ); quint16 marker; memcpy( &marker, commandline + argpos, MarkerSize ); argpos += MarkerSize; if ( marker == PrematureEndOfOptions ) { if ( prematureEnd ) *prematureEnd = true; break; } if ( marker == RegularEndOfOptions ) { if ( prematureEnd ) *prematureEnd = false; break; } const int requested = MarkerSize + marker + MarkerSize ; if ( requested > available ) { const long long int p = pid; qWarning( "KDSingleApplicationGuard: inconsistency detected when parsing command-line argument for process %lld", p ); if ( prematureEnd ) *prematureEnd = true; break; } result.push_back( QString::fromUtf8( commandline + argpos, marker ) ); argpos += marker; } return result; } KDSingleApplicationGuard::Private::~Private() { if( primaryInstance == q ) primaryInstance = 0; } bool KDSingleApplicationGuard::Private::checkOperational( const char * function, const char * act ) const { assert( function ); assert( act ); if ( !operational ) qWarning( "KDSingleApplicationGuard::%s: need to be operational to %s", function, act ); return operational; } bool KDSingleApplicationGuard::Private::checkOperationalPrimary( const char * function, const char * act ) const { if ( !checkOperational( function, act ) ) return false; if ( id != 0 ) qWarning( "KDSingleApplicationGuard::%s: need to be primary to %s", function, act ); return id == 0; } struct segmentheader { size_t size : 16; }; void KDSingleApplicationGuard::Private::sharedmem_free( char* pointer ) { InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); char* const heap = reg->commandLines; char* const heap_ptr = heap + reinterpret_cast(pointer) - sizeof( segmentheader ); const segmentheader* const header = reinterpret_cast< const segmentheader* >( heap_ptr ); const size_t size = header->size; char* end = heap + KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE; std::copy( heap_ptr + size, end, heap_ptr ); std::fill( end - size, end, 0 ); for( uint i = 0; i < reg->maxInstances; ++i ) { if( reg->info[ i ].commandline > pointer ) reg->info[ i ].commandline -= size + sizeof( segmentheader ); } } char* KDSingleApplicationGuard::Private::sharedmem_malloc( size_t size ) { InstanceRegister* const reg = reinterpret_cast( KDSingleApplicationGuard::Private::primaryInstance->d->mem.data() ); char* heap = reg->commandLines; while( heap + sizeof( segmentheader ) + size < reg->commandLines + KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE ) { segmentheader* const header = reinterpret_cast< segmentheader* >( heap ); if( header->size == 0 ) { header->size = size; return heap + sizeof( segmentheader ) - reinterpret_cast(reg->commandLines); } heap += sizeof( header ) + header->size; } return 0; } void KDSingleApplicationGuard::Private::shutdownInstance() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &q->d->mem ); instances->info[ q->d->id ].command |= ExitedInstance; if( q->isPrimaryInstance() ) { // ohh... we need a new primary instance... for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance | ShutDownCommand | KillCommand ) ) == 0 ) { instances->info[ i ].command |= BecomePrimaryCommand; return; } } // none found? then my species is dead :-( } } KDSingleApplicationGuard* KDSingleApplicationGuard::Private::primaryInstance = 0; /*! Requests that the instance kills itself (by emitting exitRequested). If the instance has since exited, does nothing. \sa shutdown(), raise() */ void KDSingleApplicationGuard::Instance::kill() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = KillCommand; } } /*! Requests that the instance shuts itself down (by calling QCoreApplication::quit()). If the instance has since exited, does nothing. \sa kill(), raise() */ void KDSingleApplicationGuard::Instance::shutdown() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = ShutDownCommand; } } /*! Requests that the instance raises its main window. The effects are implementation-defined: the KDSingleApplicationGuard corresponding to the instance will emit its \link KDSingleApplicationGuard::raiseRequested() raiseRequested()\endlink signal. If the instance has since exited, does nothing. \sa kill(), shutdown() */ void KDSingleApplicationGuard::Instance::raise() { KDLockedSharedMemoryPointer< InstanceRegister > instances( &KDSingleApplicationGuard::Private::primaryInstance->d->mem ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { if( instances->info[ i ].pid != d->pid ) continue; if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = RaiseCommand; } } #ifndef Q_WS_WIN // static void KDSingleApplicationGuard::SIGINT_handler( int sig ) { if( sig == SIGINT && Private::primaryInstance != 0 ) Private::primaryInstance->d->shutdownInstance(); ::exit( 1 ); } #endif /*! \enum KDSingleApplicationGuard::Policy Defines the policy that a KDSingleApplicationGuard can enforce: */ /*! \var KDSingleApplicationGuard::NoPolicy instanceStarted() is emitted, and the new instance allowed to continue. */ /*! \var KDSingleApplicationGuard::AutoKillOtherInstances instanceStarted() is emitted, and the new instance is killed (Instance::kill()). */ /*! Creates a new KDSingleApplicationGuard with arguments QCoreApplication::arguments() and policy AutoKillOtherInstances, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( QObject * parent ) : QObject( parent ), d( new Private( AutoKillOtherInstances, this ) ) { d->create( QCoreApplication::arguments() ); } /*! Creates a new KDSingleApplicationGuard with arguments QCoreApplication::arguments() and policy \a policy, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( Policy policy, QObject * parent ) : QObject( parent ), d( new Private( policy, this ) ) { d->create( QCoreApplication::arguments() ); } /*! Creates a new KDSingleApplicationGuard with arguments \a arguments and policy AutoKillOtherInstances, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( const QStringList & arguments, QObject * parent ) : QObject( parent ), d( new Private( AutoKillOtherInstances, this ) ) { d->create( arguments ); } /*! Creates a new KDSingleApplicationGuard with arguments \a arguments and policy \a policy, passing \a parent to the base class constructor, as usual. */ KDSingleApplicationGuard::KDSingleApplicationGuard( const QStringList & arguments, Policy policy, QObject * parent ) : QObject( parent ), d( new Private( policy, this ) ) { d->create( arguments ); } KDSingleApplicationGuard::Private::Private( Policy policy_, KDSingleApplicationGuard * qq ) : q( qq ), id( -1 ), policy( policy_ ), operational( false ), exitRequested( false ) { } void KDSingleApplicationGuard::Private::create( const QStringList & arguments ) { if ( !QCoreApplication::instance() ) { qWarning( "KDSingleApplicationGuard: you need to construct a Q(Core)Application before you can construct a KDSingleApplicationGuard" ); return; } const QString name = QCoreApplication::applicationName(); if ( name.isEmpty() ) { qWarning( "KDSingleApplicationGuard: QCoreApplication::applicationName must not be empty" ); return; } (void)registerInstanceType(); if ( primaryInstance == 0 ) primaryInstance = q; mem.setKey( name ); // if another instance crashed, the shared memory segment is still there on Unix // the following lines trigger deletion in that case #ifndef Q_WS_WIN mem.attach(); mem.detach(); #endif const bool created = mem.create( sizeof( InstanceRegister ) ); if( !created ) { QString errorMsg; if( mem.error() != QSharedMemory::NoError && mem.error() != QSharedMemory::AlreadyExists ) errorMsg += QString::fromLatin1( "QSharedMemomry::create() failed: %1" ).arg( mem.errorString() ); if( !mem.attach() ) { if( mem.error() != QSharedMemory::NoError ) errorMsg += QString::fromLatin1( "QSharedMemomry::attach() failed: %1" ).arg( mem.errorString() ); qWarning( "KDSingleApplicationGuard: Could neither create nor attach to shared memory segment." ); qWarning( "%s\n", errorMsg.toLocal8Bit().constData() ); return; } const int maxWaitMSecs = 1000 * 60; // stop waiting after 60 seconds QElapsedTimer waitTimer; waitTimer.start(); // lets wait till the other instance initialized the register bool initialized = false; while( !initialized && waitTimer.elapsed() < maxWaitMSecs ) { const KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); initialized = instances->isValid(); #ifdef Q_WS_WIN ::Sleep(20); #else usleep(20000); #endif } const KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if ( instances->version != 0 ) { qWarning( "KDSingleApplicationGuard: Detected version mismatch. " "Highest supported version: %ud, actual version: %ud", KDSINGLEAPPLICATIONGUARD_SHM_VERSION, instances->version ); return; } } KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if( !created ) { assert( instances->isValid() ); // we're _not_ the first instance // but the bool killOurSelf = false; // find a new slot... id = std::find( instances->info, instances->info + instances->maxInstances, ProcessInfo() ) - instances->info; ProcessInfo& info = instances->info[ id ]; info = ProcessInfo( NewInstance, arguments, QCoreApplication::applicationPid() ); killOurSelf = instances->policy == AutoKillOtherInstances; policy = static_cast( instances->policy ); // but the signal that we tried to start was sent to the primary application if( killOurSelf ) exitRequested = true; } else { // ok.... we are the first instance new ( instances.get() ) InstanceRegister( policy ); // create a new list (in shared memory) id = 0; // our id = 0 // and we've no command instances->info[ 0 ] = ProcessInfo( NoCommand, arguments, QCoreApplication::applicationPid() ); } #ifndef Q_WS_WIN ::signal( SIGINT, SIGINT_handler ); #endif // now listen for commands timer.start( 750, q ); operational = true; } /*! Destroys this SingleApplicationGuard. If this instance has been the primary instance and no other instance is existing anymore, the application is shut down completely. Otherwise the destructor selects another instance to be the primary instances. */ KDSingleApplicationGuard::~KDSingleApplicationGuard() { if( d->id == -1 ) return; d->shutdownInstance(); } /*! \property KDSingleApplicationGuard::operational Contains whether this KDSingleApplicationGuard is operational. A non-operational KDSingleApplicationGuard cannot be used in any meaningful way. Reasons for a KDSingleApplicationGuard being non-operational include: \li it was constructed before QApplication (or at least QCoreApplication) was constructed \li it failed to create or attach to the shared memory segment that is used for communication Get this property's value using %isOperational(). */ bool KDSingleApplicationGuard::isOperational() const { return d->operational; } /*! \property KDSingleApplicationGuard::exitRequested Contains wheter this istance has been requested to exit. This will happen when this instance was just started, but the policy is AutoKillOtherInstances or by explicitely calling kill on this instance(). Get this property's value using %isExitRequested(). */ bool KDSingleApplicationGuard::isExitRequested() const { return d->exitRequested; }; /*! \property KDSingleApplicationGuard::primaryInstance Contains whether this instance is the primary instance. The primary instance is the first instance which was started or else the instance which got selected by KDSingleApplicationGuard's destructor, when the primary instance was shut down. Get this property's value using %isPrimaryInstance(), and monitor changes to it using becamePrimaryInstance(). */ bool KDSingleApplicationGuard::isPrimaryInstance() const { return d->id == 0; } /*! \property KDSingleApplicationGuard::policy Specifies the policy KDSingleApplicationGuard is using when new instances are started. This can only be set in the primary instance. Get this property's value using %policy(), set it using %setPolicy(), and monitor changes to it using policyChanged(). */ KDSingleApplicationGuard::Policy KDSingleApplicationGuard::policy() const { return d->policy; } void KDSingleApplicationGuard::setPolicy( Policy policy ) { if ( !d->checkOperationalPrimary( "setPolicy", "change the policy" ) ) return; if( d->policy == policy ) return; d->policy = policy; emit policyChanged( policy ); KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); instances->policy = policy; } /*! Returns a list of all currently running instances. */ QVector KDSingleApplicationGuard::instances() const { if ( !d->checkOperational( "instances", "report on other instances" ) ) return QVector(); if ( Private::primaryInstance == 0 ) { Private::primaryInstance = const_cast( this ); } QVector result; const KDLockedSharedMemoryPointer< InstanceRegister > instances( const_cast< QSharedMemory* >( &d->mem ) ); for ( int i = 0, end = instances->maxInstances ; i < end ; ++i ) { const ProcessInfo& info = instances->info[ i ]; if( ( info.command & ( FreeInstance | ExitedInstance ) ) == 0 ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); result.push_back( Instance( arguments, truncated, info.pid ) ); } } return result; } /*! Shuts down all other instances. This can only be called from the the primary instance. Shut down is done gracefully via QCoreApplication::quit(). */ void KDSingleApplicationGuard::shutdownOtherInstances() { if ( !d->checkOperationalPrimary( "shutdownOtherInstances", "shut other instances down" ) ) return; KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = ShutDownCommand; } } /*! Kills all other instances. This can only be called from the the primary instance. Killing is done via emitting exitRequested. It's up to the receiving instance to react properly. */ void KDSingleApplicationGuard::killOtherInstances() { if ( !d->checkOperationalPrimary( "killOtherInstances", "kill other instances" ) ) return; KDLockedSharedMemoryPointer< InstanceRegister > instances( &d->mem ); for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { if( ( instances->info[ i ].command & ( FreeInstance | ExitedInstance ) ) == 0 ) instances->info[ i ].command = KillCommand; } } bool KDSingleApplicationGuard::event( QEvent * event ) { if ( event->type() == QEvent::Timer ) { const QTimerEvent * const te = static_cast( event ); if ( te->timerId() == d->timer.timerId() ) { d->poll(); return true; } } return QObject::event( event ); } void KDSingleApplicationGuard::Private::poll() { const quint32 now = QDateTime::currentDateTime().toTime_t(); if ( primaryInstance == 0 ) { primaryInstance = q; } if ( q->isPrimaryInstance() ) { // only the primary instance will get notified about new instances QVector< Instance > exitedInstances; QVector< Instance > startedInstances; { KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); if( instances->info[ id ].pid != QCoreApplication::applicationPid() ) { for ( int i = 1, end = instances->maxInstances ; i < end && id == 0 ; ++i ) { if( instances->info[ i ].pid == QCoreApplication::applicationPid() ) id = i; } emit q->becameSecondaryInstance(); return; } instances->info[ id ].timestamp = now; for ( int i = 1, end = instances->maxInstances ; i < end ; ++i ) { ProcessInfo& info = instances->info[ i ]; if( info.command & NewInstance ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); startedInstances.push_back( Instance( arguments, truncated, info.pid ) ); info.command &= ~NewInstance; // clear NewInstance flag } if( info.command & ExitedInstance ) { bool truncated; const QStringList arguments = info.arguments( &truncated ); exitedInstances.push_back( Instance( arguments, truncated, info.pid ) ); info.command = FreeInstance; // set FreeInstance flag } } } // one signal for every new instance - _after_ the memory segment was unlocked again for( QVector< Instance >::const_iterator it = startedInstances.constBegin(); it != startedInstances.constEnd(); ++it ) emit q->instanceStarted( *it ); for( QVector< Instance >::const_iterator it = exitedInstances.constBegin(); it != exitedInstances.constEnd(); ++it ) emit q->instanceExited( *it ); } else { // do we have a command? bool killOurSelf = false; bool shutDownOurSelf = false; bool policyDidChange = false; { KDLockedSharedMemoryPointer< InstanceRegister > instances( &mem ); const Policy oldPolicy = policy; policy = static_cast( instances->policy ); policyDidChange = policy != oldPolicy; // check for the primary instance health status if( now - instances->info[ 0 ].timestamp > KDSINGLEAPPLICATIONGUARD_TIMEOUT_SECONDS ) { std::swap( instances->info[ 0 ], instances->info[ id ] ); id = 0; instances->info[ id ].timestamp = now; emit q->becamePrimaryInstance(); instances->info[ id ].command &= ~BecomePrimaryCommand; // afterwards, reset the flag } if( instances->info[ id ].command & BecomePrimaryCommand ) { // we became primary! instances->info[ 0 ] = instances->info[ id ]; instances->info[ id ] = ProcessInfo(); // change our id to 0 and declare the old slot as free id = 0; instances->info[ id ].timestamp = now; emit q->becamePrimaryInstance(); } if( instances->info[ id ].command & RaiseCommand ) { // raise ourself! emit q->raiseRequested(); instances->info[ id ].command &= ~RaiseCommand; // afterwards, reset the flag } killOurSelf = instances->info[ id ].command & KillCommand; // check for kill command shutDownOurSelf = instances->info[ id ].command & ShutDownCommand; // check for shut down command instances->info[ id ].command &= ~( KillCommand | ShutDownCommand | BecomePrimaryCommand ); // reset both flags if( killOurSelf ) { instances->info[ id ].command |= ExitedInstance; // upon kill, we have to set the ExitedInstance flag id = -1; // becauso our d'tor won't be called anymore } } if( killOurSelf ) // kill our self takes precedence { exitRequested = true; emit q->exitRequested(); } else if( shutDownOurSelf ) qApp->quit(); else if( policyDidChange ) emit q->policyChanged( policy ); } } // #include "moc_kdsingleapplicationguard.cpp" #ifdef KDTOOLSCORE_UNITTESTS #include #include "kdautopointer.h" #include #include #include #include static void wait( int msec, QSignalSpy * spy=0, int expectedCount=INT_MAX ) { QTime t; t.start(); while ( ( !spy || spy->count() < expectedCount ) && t.elapsed() < msec ) { qApp->processEvents( QEventLoop::WaitForMoreEvents, qMax( 10, msec - t.elapsed() ) ); } } static std::ostream& operator<<( std::ostream& stream, const QStringList& list ) { stream << "QStringList("; for( QStringList::const_iterator it = list.begin(); it != list.end(); ++it ) { stream << " " << it->toLocal8Bit().data(); if( it + 1 != list.end() ) stream << ","; } stream << " )"; return stream; } namespace { class ApplicationNameSaver { Q_DISABLE_COPY( ApplicationNameSaver ) const QString oldname; public: explicit ApplicationNameSaver( const QString & name ) : oldname( QCoreApplication::applicationName() ) { QCoreApplication::setApplicationName( name ); } ~ApplicationNameSaver() { QCoreApplication::setApplicationName( oldname ); } }; } KDAB_UNITTEST_SIMPLE( KDSingleApplicationGuard, "kdcoretools" ) { // set it to an unique name const ApplicationNameSaver saver( QUuid::createUuid().toString() ); KDAutoPointer guard3; KDAutoPointer spy3; KDAutoPointer spy4; { KDSingleApplicationGuard guard1; assertEqual( guard1.policy(), KDSingleApplicationGuard::AutoKillOtherInstances ); assertEqual( guard1.instances().count(), 1 ); assertTrue( guard1.isPrimaryInstance() ); guard1.setPolicy( KDSingleApplicationGuard::NoPolicy ); assertEqual( guard1.policy(), KDSingleApplicationGuard::NoPolicy ); QSignalSpy spy1( &guard1, SIGNAL(instanceStarted(KDSingleApplicationGuard::Instance)) ); KDSingleApplicationGuard guard2; assertEqual( guard1.instances().count(), 2 ); assertEqual( guard2.instances().count(), 2 ); assertEqual( guard2.policy(), KDSingleApplicationGuard::NoPolicy ); assertFalse( guard2.isPrimaryInstance() ); wait( 1000, &spy1, 1 ); assertEqual( spy1.count(), 1 ); guard3.reset( new KDSingleApplicationGuard ); spy3.reset( new QSignalSpy( guard3.get(), SIGNAL(becamePrimaryInstance()) ) ); spy4.reset( new QSignalSpy( guard3.get(), SIGNAL(instanceExited(KDSingleApplicationGuard::Instance) ) ) ); assertFalse( guard3->isPrimaryInstance() ); } wait( 1000, spy3.get(), 1 ); wait( 1000, spy4.get(), 1 ); assertEqual( spy3->count(), 1 ); assertEqual( guard3->instances().count(), 1 ); assertTrue( guard3->isPrimaryInstance() ); guard3.reset( new KDSingleApplicationGuard ); assertEqual( guard3->instances().first().arguments(), qApp->arguments() ); QSignalSpy spyStarted( guard3.get(), SIGNAL(instanceStarted(KDSingleApplicationGuard::Instance)) ); QSignalSpy spyExited( guard3.get(), SIGNAL(instanceExited(KDSingleApplicationGuard::Instance)) ); { KDSingleApplicationGuard guard1; KDSingleApplicationGuard guard2; wait( 1000, &spyStarted, 2 ); assertEqual( spyStarted.count(), 2 ); } wait( 1000, &spyExited, 2 ); assertEqual( spyExited.count(), 2 ); spyStarted.clear(); spyExited.clear(); { // check arguments-too-long handling: QStringList args; for ( unsigned int i = 0, end = KDSINGLEAPPLICATIONGUARD_MAX_COMMAND_LINE/16 ; i != end ; ++i ) args.push_back( QLatin1String( "0123456789ABCDEF" ) ); KDSingleApplicationGuard guard3( args ); wait( 1000, &spyStarted, 1 ); const QVector instances = guard3.instances(); assertEqual( instances.size(), 2 ); assertTrue( instances[1].areArgumentsTruncated() ); } } #endif // KDTOOLSCORE_UNITTESTS #endif // QT_NO_SHAREDMEMORY #endif // QT_VERSION >= 0x040400 || defined(DOXYGEN_RUN) calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h000066400000000000000000000072021410275732300277340ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H #define KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H #include #ifndef QT_NO_SHAREDMEMORY #include #include #include "pimpl_ptr.h" #include "DllMacro.h" #include template class QVector; class QCoreApplication; class DLLEXPORT KDSingleApplicationGuard : public QObject { Q_OBJECT Q_ENUMS( Policy ) Q_PROPERTY( bool operational READ isOperational ) Q_PROPERTY( bool exitRequested READ isExitRequested ) Q_PROPERTY( bool primaryInstance READ isPrimaryInstance NOTIFY becamePrimaryInstance ) Q_PROPERTY( Policy policy READ policy WRITE setPolicy NOTIFY policyChanged ) public: enum Policy { NoPolicy = 0, AutoKillOtherInstances = 1 }; explicit KDSingleApplicationGuard( QObject * parent=nullptr ); 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() override; bool isOperational() const; bool isExitRequested() const; bool isPrimaryInstance() const; Policy policy() const; void setPolicy( Policy policy ); class Instance; QVector instances() const; Q_SIGNALS: void instanceStarted( const KDSingleApplicationGuard::Instance & instance ); void instanceExited( const KDSingleApplicationGuard::Instance & instance ); void exitRequested(); void raiseRequested(); void becamePrimaryInstance(); void becameSecondaryInstance(); void policyChanged( KDSingleApplicationGuard::Policy policy ); public Q_SLOTS: void shutdownOtherInstances(); void killOtherInstances(); protected: /*! \reimp */ bool event( QEvent * event ) override; private: #ifndef Q_WS_WIN static void SIGINT_handler( int ); #endif private: friend struct ProcessInfo; class Private; kdtools::pimpl_ptr< Private > d; }; class DLLEXPORT KDSingleApplicationGuard::Instance { friend class ::KDSingleApplicationGuard; friend class ::KDSingleApplicationGuard::Private; Instance( const QStringList &, bool, qint64 ); public: Instance(); Instance( const Instance & other ); ~Instance(); void swap( Instance & other ) { std::swap( d, other.d ); } Instance & operator=( Instance other ) { swap( other ); return *this; } bool isNull() const { return !d; } bool isValid() const; bool areArgumentsTruncated() const; const QStringList & arguments() const; qint64 pid() const; void shutdown(); void kill(); void raise(); private: class Private; Private * d; }; namespace std { template <> inline void swap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) { lhs.swap( rhs ); } } // namespace std QT_BEGIN_NAMESPACE template <> inline void qSwap( KDSingleApplicationGuard::Instance & lhs, KDSingleApplicationGuard::Instance & rhs ) { lhs.swap( rhs ); } Q_DECLARE_METATYPE( KDSingleApplicationGuard::Instance ) Q_DECLARE_TYPEINFO( KDSingleApplicationGuard::Instance, Q_MOVABLE_TYPE ); QT_END_NAMESPACE #endif // QT_NO_SHAREDMEMORY #endif /* KDTOOLSCORE_KDSINGLEAPPLICATIONGUARD_H */ calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdtoolsglobal.cpp000066400000000000000000000032161410275732300260610ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "kdtoolsglobal.h" #include #include namespace { struct Version { unsigned char v[3]; }; static inline bool operator<( const Version & lhs, const Version & rhs ) { return std::lexicographical_compare( lhs.v, lhs.v + 3, rhs.v, rhs.v + 3 ); } static inline bool operator==( const Version & lhs, const Version & rhs ) { return std::equal( lhs.v, lhs.v + 3, rhs.v ); } KDTOOLS_MAKE_RELATION_OPERATORS( Version, static inline ) } static Version kdParseQtVersion( const char * const version ) { if ( !version || qstrlen( version ) < 5 || version[1] != '.' || version[3] != '.' || ( version[5] != 0 && version[5] != '.' && version[5] != '-' ) ) return Version(); // parse error const Version result = { { static_cast< unsigned char >( version[0] - '0' ), static_cast< unsigned char >( version[2] - '0' ), static_cast< unsigned char >( version[4] - '0' ) } }; return result; } bool _kdCheckQtVersion_impl( unsigned int major, unsigned int minor, unsigned int patchlevel ) { static const Version actual = kdParseQtVersion( qVersion() ); // do this only once each run... const Version requested = { { static_cast< unsigned char >( major ), static_cast< unsigned char >( minor ), static_cast< unsigned char >( patchlevel ) } }; return actual >= requested; } calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/kdtoolsglobal.h000066400000000000000000000121501410275732300255230ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLS_KDTOOLSGLOBAL_H #define KDTOOLS_KDTOOLSGLOBAL_H #include #define KDAB_DISABLE_COPY( x ) private: x( const x & ); x & operator=( const x & ) #ifdef KDTOOLS_SHARED # ifdef BUILD_SHARED_KDTOOLSCORE # define KDTOOLSCORE_EXPORT Q_DECL_EXPORT # else # define KDTOOLSCORE_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDTOOLSGUI # define KDTOOLSGUI_EXPORT Q_DECL_EXPORT # else # define KDTOOLSGUI_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDTOOLSXML # define KDTOOLSXML_EXPORT Q_DECL_EXPORT # else # define KDTOOLSXML_EXPORT Q_DECL_IMPORT # endif # ifdef BUILD_SHARED_KDUPDATER # define KDTOOLS_UPDATER_EXPORT Q_DECL_EXPORT # else # define KDTOOLS_UPDATER_EXPORT Q_DECL_IMPORT # endif #else // KDTOOLS_SHARED # define KDTOOLSCORE_EXPORT # define KDTOOLSGUI_EXPORT # define KDTOOLSXML_EXPORT # define KDTOOLS_UPDATER_EXPORT #endif // KDTOOLS_SHARED #define MAKEINCLUDES_EXPORT #define DOXYGEN_PROPERTY( x ) #ifdef DOXYGEN_RUN # define KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( func ) operator unspecified_bool_type() const { return func; } # define KDAB_USING_SAFE_BOOL_OPERATOR( Class ) operator unspecified_bool_type() const; #else # define KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( func ) \ private: \ struct __safe_bool_dummy__ { void nonnull() {} }; \ public: \ typedef void ( __safe_bool_dummy__::*unspecified_bool_type )(); \ operator unspecified_bool_type() const { \ return ( func ) ? &__safe_bool_dummy__::nonnull : 0 ; \ } #define KDAB_USING_SAFE_BOOL_OPERATOR( Class ) \ using Class::operator Class::unspecified_bool_type; #endif #define KDTOOLS_MAKE_RELATION_OPERATORS( Class, linkage ) \ linkage bool operator>( const Class & lhs, const Class & rhs ) { \ return operator<( rhs, lhs ); \ } \ linkage bool operator!=( const Class & lhs, const Class & rhs ) { \ return !operator==( lhs, rhs ); \ } \ linkage bool operator<=( const Class & lhs, const Class & rhs ) { \ return !operator>( lhs, rhs ); \ } \ linkage bool operator>=( const Class & lhs, const Class & rhs ) { \ return !operator<( lhs, rhs ); \ } template inline T & __kdtools__dereference_for_methodcall( T & o ) { return o; } template inline T & __kdtools__dereference_for_methodcall( T * o ) { return *o; } #define KDAB_SET_OBJECT_NAME( x ) __kdtools__dereference_for_methodcall( x ).setObjectName( QLatin1String( #x ) ) KDTOOLSCORE_EXPORT bool _kdCheckQtVersion_impl( unsigned int major, unsigned int minor=0, unsigned int patchlevel=0 ); static inline bool kdCheckQtVersion( unsigned int major, unsigned int minor=0, unsigned int patchlevel=0 ) { return (major<<16|minor<<8|patchlevel) <= static_cast(QT_VERSION) || _kdCheckQtVersion_impl( major, minor, patchlevel ); } #define KDTOOLS_DECLARE_PRIVATE_BASE( Class ) \ protected: \ class Private; \ Private * d_func() { return _d; } \ const Private * d_func() const { return _d; } \ Class( Private * _d_, bool b ) : _d( _d_ ) { init(b); } \ private: \ void init(bool); \ private: \ Private * _d #define KDTOOLS_DECLARE_PRIVATE_DERIVED( Class, Base ) \ protected: \ class Private; \ Private * d_func() { \ return reinterpret_cast( Base::d_func() ); \ } \ const Private * d_func() const { \ return reinterpret_cast( Base::d_func() ); \ } \ Class( Private * _d_, bool b ) \ : Base( reinterpret_cast(_d_), b ) { init(b); } \ private: \ void init(bool) #endif /* KDTOOLS_KDTOOLSGLOBAL_H */ calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/pimpl_ptr.cpp000066400000000000000000000105051410275732300252260ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #include "pimpl_ptr.h" /*! \class pimpl_ptr: \ingroup core smartptr \brief Owning pointer for private implementations \since_c 2.1 (The exception safety of this class has not been evaluated yet.) pimpl_ptr is a smart immutable pointer, which owns the contained object. Unlike other smart pointers, it creates a standard constructed object when instanciated via the \link pimpl_ptr() standard constructor\endlink. Additionally, pimpl_ptr respects constness of the pointer object and returns \c const \c T* for a const pimpl_ptr object. The content of a pimpl_ptr cannot be changed during it's lifetime. \section general-use General Use The general use case of pimpl_ptr is the "Pimpl Idiom", i.e. hiding the private implementation of a class from the user's compiler which see \c MyClass as \code class MyClass { public: MyClass(); ~MyClass(); // public class API int value() const; private: class Private; // defined later kdtools::pimpl_ptr< Private > d; }; \endcode but not the private parts of it. These can only be seen (and accessed) by the code knowing \c MyClass::Private: \code class MyClass::Private { public: int value; }; MyClass::MyClass() { // d was automatically filled with new Private d->value = 42; } MyClass::~MyClass() { // the content of d gets deleted automatically } int MyClass::value() const { // access the private part: // since MyClass::value() is const, the returned pointee is const, too return d->value; } \endcode */ /*! \fn pimpl_ptr::pimpl_ptr() Default constructor. Constructs a pimpl_tr that contains (owns) a standard constructed instance of \c T. \post \c *this owns a new object. */ /*! \fn pimpl_ptr::pimpl_ptr( T * t ) Constructor. Constructs a pimpl_ptr that contains (owns) \a t. \post get() == obj */ /*! \fn pimpl_ptr::~pimpl_ptr() Destructor. \post The object previously owned by \c *this has been deleted. */ /*! \fn const T * pimpl_ptr::get() const \returns a const pointer to the contained (owned) object. \overload */ /*! \fn T * pimpl_ptr::get() \returns a pointer to the contained (owned) object. */ /*! \fn const T & pimpl_ptr::operator*() const Dereference operator. Returns \link get() *get()\endlink. \overload */ /*! \fn T & pimpl_ptr::operator*() Dereference operator. Returns \link get() *get()\endlink. */ /*! \fn const T * pimpl_ptr::operator->() const Member-by-pointer operator. Returns get(). \overload */ /*! \fn T * pimpl_ptr::operator->() Member-by-pointer operator. Returns get(). */ #ifdef KDTOOLSCORE_UNITTESTS #include #include #include namespace { struct ConstTester { bool isConst() { return false; } bool isConst() const { return true; } }; } KDAB_UNITTEST_SIMPLE( pimpl_ptr, "kdcoretools" ) { { kdtools::pimpl_ptr< QObject > p; assertNotNull( p.get() ); assertNull( p->parent() ); } { QPointer< QObject > o; { kdtools::pimpl_ptr< QObject > qobject( new QObject ); o = qobject.get(); assertEqual( o, qobject.operator->() ); assertEqual( o, &(qobject.operator*()) ); } assertNull( o ); } { const kdtools::pimpl_ptr< QObject > qobject( new QObject ); const QObject* o = qobject.get(); assertEqual( o, qobject.operator->() ); assertEqual( o, &(qobject.operator*()) ); } { kdtools::pimpl_ptr< QObject > o1; assertTrue( o1 ); kdtools::pimpl_ptr< QObject > o2( 0 ); assertFalse( o2 ); } { const kdtools::pimpl_ptr< ConstTester > o1; kdtools::pimpl_ptr< ConstTester > o2; assertTrue( o1->isConst() ); assertFalse( o2->isConst() ); assertTrue( (*o1).isConst() ); assertFalse( (*o2).isConst() ); assertTrue( o1.get()->isConst() ); assertFalse( o2.get()->isConst() ); } } #endif // KDTOOLSCORE_UNITTESTS calamares-3.2.41.1/3rdparty/kdsingleapplicationguard/pimpl_ptr.h000066400000000000000000000026001410275732300246700ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2001-2010 Klaralvdalens Datakonsult AB. * SPDX-License-Identifier: LGPL-2.0-only * * The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. */ #ifndef KDTOOLSCORE_PIMPL_PTR_H #define KDTOOLSCORE_PIMPL_PTR_H #include "kdtoolsglobal.h" #ifndef DOXYGEN_RUN namespace kdtools { #endif template class pimpl_ptr { KDAB_DISABLE_COPY( pimpl_ptr ); T * d; public: pimpl_ptr() : d( new T ) {} explicit pimpl_ptr( T * t ) : d( t ) {} ~pimpl_ptr() { delete d; d = nullptr; } T * get() { return d; } const T * get() const { return d; } T * operator->() { return get(); } const T * operator->() const { return get(); } T & operator*() { return *get(); } const T & operator*() const { return *get(); } KDAB_IMPLEMENT_SAFE_BOOL_OPERATOR( get() ) }; // these are not implemented, so's we can catch their use at // link-time. Leaving them undeclared would open up a comparison // via operator unspecified-bool-type(). template void operator==( const pimpl_ptr &, const pimpl_ptr & ); template void operator!=( const pimpl_ptr &, const pimpl_ptr & ); #ifndef DOXYGEN_RUN } // namespace kdtools #endif #endif /* KDTOOLSCORE_PIMPL_PTR_H */ calamares-3.2.41.1/3rdparty/waitingspinnerwidget.cpp000066400000000000000000000204711410275732300224210ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin * SPDX-FileCopyrightText: 2014 William Hallatt * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT */ /* 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 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. */ // Own includes #include "waitingspinnerwidget.h" // Standard includes #include #include // Qt includes #include #include WaitingSpinnerWidget::WaitingSpinnerWidget(QWidget *parent, bool centerOnParent, bool disableParentWhenSpinning) : QWidget(parent), _centerOnParent(centerOnParent), _disableParentWhenSpinning(disableParentWhenSpinning) { initialize(); } WaitingSpinnerWidget::WaitingSpinnerWidget(Qt::WindowModality modality, QWidget *parent, bool centerOnParent, bool disableParentWhenSpinning) : QWidget(parent, Qt::Dialog | Qt::FramelessWindowHint), _centerOnParent(centerOnParent), _disableParentWhenSpinning(disableParentWhenSpinning){ initialize(); // We need to set the window modality AFTER we've hidden the // widget for the first time since changing this property while // the widget is visible has no effect. setWindowModality(modality); setAttribute(Qt::WA_TranslucentBackground); } void WaitingSpinnerWidget::initialize() { _color = Qt::black; _roundness = 100.0; _minimumTrailOpacity = 3.14159265358979323846; _trailFadePercentage = 80.0; _revolutionsPerSecond = 1.57079632679489661923; _numberOfLines = 20; _lineLength = 10; _lineWidth = 2; _innerRadius = 10; _currentCounter = 0; _isSpinning = false; _timer = new QTimer(this); connect(_timer, SIGNAL(timeout()), this, SLOT(rotate())); updateSize(); updateTimer(); hide(); } void WaitingSpinnerWidget::paintEvent(QPaintEvent *) { updatePosition(); QPainter painter(this); painter.fillRect(this->rect(), Qt::transparent); painter.setRenderHint(QPainter::Antialiasing, true); if (_currentCounter >= _numberOfLines) { _currentCounter = 0; } painter.setPen(Qt::NoPen); for (int i = 0; i < _numberOfLines; ++i) { painter.save(); painter.translate(_innerRadius + _lineLength, _innerRadius + _lineLength); qreal rotateAngle = static_cast(360 * i) / static_cast(_numberOfLines); painter.rotate(rotateAngle); painter.translate(_innerRadius, 0); int distance = lineCountDistanceFromPrimary(i, _currentCounter, _numberOfLines); QColor color = currentLineColor(distance, _numberOfLines, _trailFadePercentage, _minimumTrailOpacity, _color); painter.setBrush(color); // TODO improve the way rounded rect is painted painter.drawRoundedRect( QRect(0, -_lineWidth / 2, _lineLength, _lineWidth), _roundness, _roundness, Qt::RelativeSize); painter.restore(); } } void WaitingSpinnerWidget::start() { updatePosition(); _isSpinning = true; show(); if(parentWidget() && _disableParentWhenSpinning) { parentWidget()->setEnabled(false); } if (!_timer->isActive()) { _timer->start(); _currentCounter = 0; } } void WaitingSpinnerWidget::stop() { _isSpinning = false; hide(); if(parentWidget() && _disableParentWhenSpinning) { parentWidget()->setEnabled(true); } if (_timer->isActive()) { _timer->stop(); _currentCounter = 0; } } void WaitingSpinnerWidget::setNumberOfLines(int lines) { _numberOfLines = lines; _currentCounter = 0; updateTimer(); } void WaitingSpinnerWidget::setLineLength(int length) { _lineLength = length; updateSize(); } void WaitingSpinnerWidget::setLineWidth(int width) { _lineWidth = width; updateSize(); } void WaitingSpinnerWidget::setInnerRadius(int radius) { _innerRadius = radius; updateSize(); } QColor WaitingSpinnerWidget::color() { return _color; } qreal WaitingSpinnerWidget::roundness() { return _roundness; } qreal WaitingSpinnerWidget::minimumTrailOpacity() { return _minimumTrailOpacity; } qreal WaitingSpinnerWidget::trailFadePercentage() { return _trailFadePercentage; } qreal WaitingSpinnerWidget::revolutionsPersSecond() { return _revolutionsPerSecond; } int WaitingSpinnerWidget::numberOfLines() { return _numberOfLines; } int WaitingSpinnerWidget::lineLength() { return _lineLength; } int WaitingSpinnerWidget::lineWidth() { return _lineWidth; } int WaitingSpinnerWidget::innerRadius() { return _innerRadius; } bool WaitingSpinnerWidget::isSpinning() const { return _isSpinning; } void WaitingSpinnerWidget::setRoundness(qreal roundness) { _roundness = std::max(0.0, std::min(100.0, roundness)); } void WaitingSpinnerWidget::setColor(QColor color) { _color = color; } void WaitingSpinnerWidget::setRevolutionsPerSecond(qreal revolutionsPerSecond) { _revolutionsPerSecond = revolutionsPerSecond; updateTimer(); } void WaitingSpinnerWidget::setTrailFadePercentage(qreal trail) { _trailFadePercentage = trail; } void WaitingSpinnerWidget::setMinimumTrailOpacity(qreal minimumTrailOpacity) { _minimumTrailOpacity = minimumTrailOpacity; } void WaitingSpinnerWidget::rotate() { ++_currentCounter; if (_currentCounter >= _numberOfLines) { _currentCounter = 0; } update(); } void WaitingSpinnerWidget::updateSize() { int size = (_innerRadius + _lineLength) * 2; setFixedSize(size, size); } void WaitingSpinnerWidget::updateTimer() { _timer->setInterval(1000 / (_numberOfLines * _revolutionsPerSecond)); } void WaitingSpinnerWidget::updatePosition() { if (parentWidget() && _centerOnParent) { move(parentWidget()->width() / 2 - width() / 2, parentWidget()->height() / 2 - height() / 2); } } int WaitingSpinnerWidget::lineCountDistanceFromPrimary(int current, int primary, int totalNrOfLines) { int distance = primary - current; if (distance < 0) { distance += totalNrOfLines; } return distance; } QColor WaitingSpinnerWidget::currentLineColor(int countDistance, int totalNrOfLines, qreal trailFadePerc, qreal minOpacity, QColor color) { if (countDistance == 0) { return color; } const qreal minAlphaF = minOpacity / 100.0; int distanceThreshold = static_cast(ceil((totalNrOfLines - 1) * trailFadePerc / 100.0)); if (countDistance > distanceThreshold) { color.setAlphaF(minAlphaF); } else { qreal alphaDiff = color.alphaF() - minAlphaF; qreal gradient = alphaDiff / static_cast(distanceThreshold + 1); qreal resultAlpha = color.alphaF() - gradient * countDistance; // If alpha is out of bounds, clip it. resultAlpha = std::min(1.0, std::max(0.0, resultAlpha)); color.setAlphaF(resultAlpha); } return color; } calamares-3.2.41.1/3rdparty/waitingspinnerwidget.h000066400000000000000000000101211410275732300220550ustar00rootroot00000000000000/* * SPDX-FileCopyrightText: 2012-2014 Alexander Turkin * SPDX-FileCopyrightText: 2014 William Hallatt * SPDX-FileCopyrightText: 2015 Jacob Dawid * SPDX-License-Identifier: MIT */ /* 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 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. */ #pragma once // Qt includes #include #include #include class WaitingSpinnerWidget : public QWidget { Q_OBJECT public: /*! Constructor for "standard" widget behaviour - use this * constructor if you wish to, e.g. embed your widget in another. */ WaitingSpinnerWidget(QWidget *parent = nullptr, bool centerOnParent = true, bool disableParentWhenSpinning = true); /*! Constructor - use this constructor to automatically create a modal * ("blocking") spinner on top of the calling widget/window. If a valid * parent widget is provided, "centreOnParent" will ensure that * QtWaitingSpinner automatically centres itself on it, if not, * "centreOnParent" is ignored. */ WaitingSpinnerWidget(Qt::WindowModality modality, QWidget *parent = nullptr, bool centerOnParent = true, bool disableParentWhenSpinning = true); public slots: void start(); void stop(); public: void setColor(QColor color); void setRoundness(qreal roundness); void setMinimumTrailOpacity(qreal minimumTrailOpacity); void setTrailFadePercentage(qreal trail); void setRevolutionsPerSecond(qreal revolutionsPerSecond); void setNumberOfLines(int lines); void setLineLength(int length); void setLineWidth(int width); void setInnerRadius(int radius); void setText(QString text); QColor color(); qreal roundness(); qreal minimumTrailOpacity(); qreal trailFadePercentage(); qreal revolutionsPersSecond(); int numberOfLines(); int lineLength(); int lineWidth(); int innerRadius(); bool isSpinning() const; private slots: void rotate(); protected: void paintEvent(QPaintEvent *paintEvent) override; private: static int lineCountDistanceFromPrimary(int current, int primary, int totalNrOfLines); static QColor currentLineColor(int distance, int totalNrOfLines, qreal trailFadePerc, qreal minOpacity, QColor color); void initialize(); void updateSize(); void updateTimer(); void updatePosition(); private: QColor _color; qreal _roundness; // 0..100 qreal _minimumTrailOpacity; qreal _trailFadePercentage; qreal _revolutionsPerSecond; int _numberOfLines; int _lineLength; int _lineWidth; int _innerRadius; private: WaitingSpinnerWidget(const WaitingSpinnerWidget&); WaitingSpinnerWidget& operator=(const WaitingSpinnerWidget&); QTimer *_timer; bool _centerOnParent; bool _disableParentWhenSpinning; int _currentCounter; bool _isSpinning; }; calamares-3.2.41.1/AUTHORS000066400000000000000000000017431410275732300147510ustar00rootroot00000000000000 # MAINTAINER Calamares development is sponsored by Blue Systems GmbH - Liberating Software. Calamares maintainers through the years: * Teo Mrnjavac (maintainer -2017) * Adriaan de Groot (maintainer 2017-) # CONTRIBUTORS Calamares has received contributions of code, documentation, artwork and moral support from (alphabetically by first name or nickname): - Alf Gaida - aliveafter1000 - Allen Welkie - AlmAck - Andrius Štikonas - Arnaud Ferraris - artoo@cromnix.org - Bernhard Landauer - Bezzy1999 - Bill Auger - Caio Jordão Carvalho - Collabora LTD - crispg72 - Dan Simmons - demmm - Dominic Hayes - Frede H - Gabriel Craciunescu - Harald Sitter - Kai Dohmen - Kevin Kofler - Kyle Robertze - Lisa Vitolo - Neal Gompa - n3rdopolis - Philip Müller - Ramon Buldó - Raul Rodrigo Segura - Rohan Garg - Scott Harvey - Simon Quigley - Walter Lapchynski calamares-3.2.41.1/CHANGES000066400000000000000000001740451410275732300147020ustar00rootroot00000000000000 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.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`. calamares-3.2.41.1/CMakeLists.txt000066400000000000000000000613251410275732300164430ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # ### # # Calamares is Free Software: see the License-Identifier above. # # Individual files may have different licenses (like the CMake # infrastructure, which is BSD-2-Clause licensed). Check the SPDX # identifiers in each file. # ### # # Generally, this CMakeLists.txt will find all the dependencies for Calamares # and complain appropriately. See below (later in this file) for CMake-level # options. There are some "secret" options as well: # # SKIP_MODULES : a space or semicolon-separated list of directory names # under src/modules that should not be built. # 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. 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: # # cmake . -DSKIP_MODULES="partition luksbootkeycfg" # # 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.41.1 LANGUAGES C CXX ) set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development ### OPTIONS # option( INSTALL_CONFIG "Install configuration files" OFF ) option( INSTALL_POLKIT "Install Polkit configuration" 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 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_LAME (see partition/CMakeLists.txt) ### USE_* # # By convention, when there are multiple modules that implement similar # functionality, and it only makes sense to have **at most one** of them # enabled at any time, those modules are named -. # For example, services-systemd and services-openrc. # # Setting up SKIP_MODULES to ignore "the ones you don't want" can be # annoying and error-prone (e.g. if a new module shows up). The USE_* # modules provide a way to do automatic selection. To pick exactly # one of the implementations from group , set USE_ to the # name of the implementation. If USE_ is unset, or empty, then # all the implementations are enabled (this just means they are # **available** to `settings.conf`, not that they are used). # # 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 # set( CALAMARES_ORGANIZATION_NAME "Calamares" ) set( CALAMARES_ORGANIZATION_DOMAIN "github.com/calamares" ) set( CALAMARES_APPLICATION_NAME "Calamares" ) set( CALAMARES_DESCRIPTION_SUMMARY "The distribution-independent installer framework" ) ### Transifex (languages) info # # complete = 100% translated, # good = nearly complete (use own judgement, right now >= 75%) # ok = incomplete (more than 25% untranslated, at least 5% translated), # incomplete = <5% translated, placeholder in tx; these are not included. # # Language en (source language) is added later. It isn't listed in # Transifex either. Get the list of languages and their status # from https://transifex.com/calamares/calamares/ , or (preferably) # use ci/txstats.py to automatically check. # # 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 # # NOTE: move eo (Esperanto) to _ok once Qt can actually create a # 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 79 languages set( _tx_complete az az_AZ ca fi_FI he hi hr ja lt sq sv uk zh_TW ) set( _tx_good as be ca@valencia cs_CZ da de fr fur it_IT ko ml nl pt_BR pt_PT ru sk tg tr_TR vi zh_CN ) set( _tx_ok ar ast bg bn el en_GB es es_MX es_PR et eu fa gl hu id is mr nb pl ro sl sr sr@latin th zh_HK ) set( _tx_incomplete eo es_PE fr_CH gu id_ID ie kk kn ko_KR lo lv mk ne ne_NP ru_RU si te ur uz zh ) ### Required versions # # See DEPENDENCIES section below. set( QT_VERSION 5.9.0 ) set( YAMLCPP_VERSION 0.5.1 ) set( ECM_VERSION 5.18 ) set( PYTHONLIBS_VERSION 3.3 ) set( BOOSTPYTHON_VERSION 1.55.0 ) ### CMAKE SETUP # set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules" ) # Enable IN_LIST if( POLICY CMP0057 ) cmake_policy( SET CMP0057 NEW ) endif() # Let ``AUTOMOC`` and ``AUTOUIC`` process ``GENERATED`` files. if( POLICY CMP0071 ) cmake_policy( SET CMP0071 NEW ) endif() # Recognize more macros to trigger automoc if(NOT CMAKE_VERSION VERSION_LESS "3.10.0") list(APPEND CMAKE_AUTOMOC_MACRO_NAMES "K_PLUGIN_FACTORY_WITH_JSON" "K_EXPORT_PLASMA_DATAENGINE_WITH_JSON" "K_EXPORT_PLASMA_RUNNER" ) endif() # CMake Modules include( CMakePackageConfigHelpers ) include( CTest ) include( FeatureSummary ) # Calamares Modules include( CMakeColors ) ### C++ SETUP # 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 ) 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." ) # 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++17). foreach( CLANG_WARNINGS -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-undefined-reinterpret-cast -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-documentation-unknown-command -Wno-unknown-warning-option ) string( APPEND CMAKE_CXX_FLAGS " ${CLANG_WARNINGS}" ) endforeach() # 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( CMAKE_TOOLCHAIN_PREFIX "llvm-" ) # 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} -Wnon-virtual-dtor -Woverloaded-virtual" ) set( SUPPRESS_3RDPARTY_WARNINGS "" ) endif() # Use mark_thirdparty_code() to reduce warnings from the compiler # on code that we're not going to fix. Call this with a list of files. macro(mark_thirdparty_code) set_source_files_properties( ${ARGV} PROPERTIES COMPILE_FLAGS "${SUPPRESS_3RDPARTY_WARNINGS}" COMPILE_DEFINITIONS "THIRDPARTY" ) endmacro() if( CMAKE_COMPILER_IS_GNUCXX ) if( CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.9 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 4.9 ) message( STATUS "Found GNU g++ ${CMAKE_CXX_COMPILER_VERSION}, enabling colorized error messages." ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=auto" ) endif() endif() ### DEPENDENCIES # 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 ) find_package( YAMLCPP ${YAMLCPP_VERSION} REQUIRED ) if( INSTALL_POLKIT ) find_package( PolkitQt5-1 REQUIRED ) else() # Find it anyway, for dependencies-reporting find_package( PolkitQt5-1 ) endif() set_package_properties( PolkitQt5-1 PROPERTIES DESCRIPTION "Qt5 support for Polkit" URL "https://cgit.kde.org/polkit-qt-1.git" PURPOSE "PolkitQt5-1 helps with installing Polkit configuration" ) # Find ECM once, and add it to the module search path; Calamares # modules that need ECM can do # find_package(ECM ${ECM_VERSION} REQUIRED NO_MODULE), # no need to mess with the module path after. find_package(ECM ${ECM_VERSION} NO_MODULE) if( ECM_FOUND ) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) if ( BUILD_TESTING ) # ECM implies that we can build the tests, too find_package( Qt5 COMPONENTS Test REQUIRED ) include( ECMAddTests ) endif() include(KDEInstallDirs) endif() find_package( KF5 QUIET COMPONENTS CoreAddons Crash DBusAddons ) set_package_properties( KF5::CoreAddons PROPERTIES TYPE REQUIRED DESCRIPTION "Classes built on QtCore for About Data" URL "https://api.kde.org/frameworks/kcoreaddons/" 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() # 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 "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 set(Boost_NO_BOOST_CMAKE ON) include( BoostPython3 ) find_boost_python3( ${BOOSTPYTHON_VERSION} ${PYTHONLIBS_VERSION_STRING} CALAMARES_BOOST_PYTHON3_FOUND ) set_package_properties( 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." URL "http://pythonqt.sourceforge.net" PURPOSE "PythonQt is used for Python view modules." ) endif() if( NOT PYTHONLIBS_FOUND OR NOT CALAMARES_BOOST_PYTHON3_FOUND ) message(STATUS "Disabling Boost::Python modules") set( WITH_PYTHON OFF ) endif() if( NOT PYTHONLIBS_FOUND OR NOT PYTHONQT_FOUND ) message(STATUS "Disabling PythonQt modules") 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( 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 ( curr_tx ) # New in list foreach( l ${curr_tx} ) 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.") set( tx_errors ON ) endif() endforeach() unset( p_l ) unset( l ) endif() unset( curr_tx ) if( tx_errors ) message( FATAL_ERROR "Translation warnings, see above." ) endif() set( CALAMARES_TRANSLATION_LANGUAGES en ${_tx_complete} ${_tx_good} ${_tx_ok} ) list( SORT CALAMARES_TRANSLATION_LANGUAGES ) add_subdirectory( lang ) # i18n tools ### Example Distro # # For testing purposes Calamares includes a very, very, limited sample # distro called "Generic". The root filesystem of "Generic" lives in # data/example-root and can be squashed up as part of the build, so # that a pure-upstream run of ./calamares -d from the build directory # (with all the default settings and configurations) can actually # do an complete example run. # # Some binaries from the build host (e.g. /bin and /lib) are also # squashed into the example filesystem. # # To build the example distro (for use by the default, example, # unsquashfs module), build the target 'example-distro', eg.: # # make example-distro # find_program( mksquashfs_PROGRAM mksquashfs ) if( mksquashfs_PROGRAM ) set( mksquashfs_FOUND ON ) set( src_fs ${CMAKE_SOURCE_DIR}/data/example-root/ ) set( dst_fs ${CMAKE_BINARY_DIR}/example.sqfs ) if( EXISTS ${src_fs} ) # based on the build host. If /lib64 exists, assume it is needed. # Collect directories needed for a minimal binary distro, # Note that the last path component is added to the root, so # if you add /usr/sbin here, it will be put into /sbin_1. # Add such paths to /etc/profile under ${src_fs}. set( candidate_fs /sbin /bin /lib /lib64 ) set( host_fs "" ) foreach( c_fs ${candidate_fs} ) if( EXISTS ${c_fs} ) list( APPEND host_fs ${c_fs} ) endif() endforeach() add_custom_command( OUTPUT ${dst_fs} COMMAND ${mksquashfs_PROGRAM} ${src_fs} ${dst_fs} -all-root COMMAND ${mksquashfs_PROGRAM} ${host_fs} ${dst_fs} -all-root ) add_custom_target(example-distro DEPENDS ${dst_fs}) endif() else() set( mksquashfs_FOUND OFF ) endif() # Doesn't list mksquashfs as an optional dep, though, because it # hasn't been sent through the find_package() scheme. # # "http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html" add_feature_info( ExampleDistro ${mksquashfs_FOUND} "Create example-distro target.") ### CALAMARES PROPER # set( CALAMARES_VERSION ${CALAMARES_VERSION_MAJOR}.${CALAMARES_VERSION_MINOR}.${CALAMARES_VERSION_PATCH} ) # In rare cases we have hotfix-releases with a tweak if( CALAMARES_VERSION_TWEAK ) set( CALAMARES_VERSION "${CALAMARES_VERSION}.${CALAMARES_VERSION_TWEAK}" ) endif() set( CALAMARES_VERSION_SHORT "${CALAMARES_VERSION}" ) # 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( ExtendedVersion ) extend_version( "${CALAMARES_VERSION}" OFF CALAMARES_VERSION_SHORT CALAMARES_VERSION ) endif() # Special target for not-RC (e.g. might-be-release) builds. # This is used by the release script to get the version. if ( CALAMARES_VERSION_RC EQUAL 0 ) add_custom_target(show-version ${CMAKE_COMMAND} -E echo CALAMARES_VERSION=${CALAMARES_VERSION_SHORT} USES_TERMINAL ) endif() # enforce using constBegin, constEnd for const-iterators add_definitions( -DQT_STRICT_ITERATORS -DQT_SHARED -DQT_SHAREDPOINTER_TRACK_POINTERS ) # set paths set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) set( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" ) # Better default installation paths: GNUInstallDirs defines # CMAKE_INSTALL_FULL_SYSCONFDIR to be CMAKE_INSTALL_PREFIX/etc by default # but we really want /etc if( NOT DEFINED CMAKE_INSTALL_SYSCONFDIR ) set( CMAKE_INSTALL_SYSCONFDIR "/etc" ) endif() # make predefined install dirs available everywhere include( GNUInstallDirs ) # 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 ) 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") ### 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( PACKAGE Calamares ) 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" "CMakeModules/CalamaresAddBrandingSubdirectory.cmake" "CMakeModules/CalamaresAddLibrary.cmake" "CMakeModules/CalamaresAddModuleSubdirectory.cmake" "CMakeModules/CalamaresAddPlugin.cmake" "CMakeModules/CalamaresAddTest.cmake" "CMakeModules/CalamaresAddTranslations.cmake" "CMakeModules/CalamaresAutomoc.cmake" "CMakeModules/CalamaresCheckModuleSelection.cmake" "CMakeModules/CMakeColors.cmake" "CMakeModules/FindYAMLCPP.cmake" DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" ) ### Miscellaneous installs # # if( INSTALL_CONFIG ) install( FILES settings.conf DESTINATION share/calamares ) endif() if( INSTALL_POLKIT ) install( 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 ) install( FILES man/calamares.8 DESTINATION ${CMAKE_INSTALL_MANDIR}/man8/ ) # uninstall target configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY ) add_custom_target( uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake ) ### CMAKE SUMMARY REPORT # get_directory_property( SKIPPED_MODULES DIRECTORY src/modules DEFINITION LIST_SKIPPED_MODULES ) calamares_explain_skipped_modules( ${SKIPPED_MODULES} ) feature_summary( WHAT DISABLED_FEATURES DESCRIPTION "The following features have been disabled:" QUIET_ON_EMPTY ) feature_summary( WHAT OPTIONAL_PACKAGES_NOT_FOUND DESCRIPTION "The following OPTIONAL packages were not found:" QUIET_ON_EMPTY ) feature_summary( WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES 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) calamares-3.2.41.1/CMakeModules/000077500000000000000000000000001410275732300162055ustar00rootroot00000000000000calamares-3.2.41.1/CMakeModules/BoostPython3.cmake000066400000000000000000000073011410275732300215630ustar00rootroot00000000000000# === 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 # libboost_python-py33.so # libboost_python-py34.so # # Boost upstream however installs Boost.Python3 libboost_python3.so, which is # what FindBoost.cmake is looking for. It looks for a library named # "libboost_${component}.so". # # On Gentoo instead, the >=dev-libs/boost-1.54 package provides boost library # with a name like: # libboost_python-2.7.so # libboost_python-3.3.so # libboost_python-3.4.so # depending on what python's targets you selected during install # # On Fedora >= 30 instead, the boost-python3-devel provides boost library with a # name like: # libboost_python37.so # depending on what python's targets you selected during install # # find_boost_python3() tries to find the package with different component # names. By default it tries "python3", "python-py$suffix" and # "python-$dotsuffix", where suffix is based on the `python_version` argument. # One can supply a custom component name by setting the # `CALAMARES_BOOST_PYTHON3_COMPONENT` variable at CMake time. set( CALAMARES_BOOST_PYTHON3_COMPONENT python3 CACHE STRING "Name of the Boost.Python component. If Boost.Python is installed as libboost_python-foo.so then this variable should be set to 'python-foo'." ) include(FindPackageHandleStandardArgs) macro( _find_boost_python3_int boost_version componentname found_var ) foreach( _fbp_name ${CALAMARES_BOOST_PYTHON3_COMPONENT} ${componentname} ) find_package( Boost ${boost_version} QUIET COMPONENTS ${_fbp_name} ) string( TOUPPER ${_fbp_name} _fbp_uc_name ) if( Boost_${_fbp_uc_name}_FOUND ) if( CMAKE_SYSTEM_NAME MATCHES "FreeBSD" ) # No upcasing set( ${found_var} ${_fbp_name} ) else() set( ${found_var} ${_fbp_uc_name} ) endif() break() endif() endforeach() endmacro() macro( find_boost_python3 boost_version python_version found_var ) set( ${found_var} OFF ) set( _fbp_found OFF ) # turns "3.4.123abc" into "34" string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\..*" "\\1\\2" _fbp_python_short_version ${python_version} ) _find_boost_python3_int( ${boost_version} python-py${_fbp_python_short_version} _fbp_found ) if (NOT _fbp_found) _find_boost_python3_int( ${boost_version} python${_fbp_python_short_version} _fbp_found ) endif() if (NOT _fbp_found) # The following loop changes the searched name for Gentoo based distributions # turns "3.4.123abc" into "3.4" string( REGEX REPLACE "([0-9]+)\\.([0-9]+)\\..*" "\\1.\\2" _fbp_python_short_version ${python_version} ) _find_boost_python3_int( ${boost_version} python-${_fbp_python_short_version} _fbp_found ) 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} ) else() find_package( Boost ${boost_version} COMPONENTS Python ) endif() set_package_properties( Boost PROPERTIES DESCRIPTION "A C++ library which enables seamless interoperability between C++ and Python 3." URL "http://www.boost.org" ) endmacro() calamares-3.2.41.1/CMakeModules/CMakeColors.cmake000066400000000000000000000024251410275732300213540ustar00rootroot00000000000000# === 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}") set(_use_color OFF) endif() if("0" STREQUAL "$ENV{CLICOLOR_FORCE}") set(_use_color OFF) endif() if(NOT CMAKE_COLOR_MAKEFILE) set(_use_color OFF) endif() if(_use_color) string(ASCII 27 Esc) set(ColorReset "${Esc}[m") set(ColorBold "${Esc}[1m") set(Red "${Esc}[31m") set(Green "${Esc}[32m") set(Yellow "${Esc}[33m") set(Blue "${Esc}[34m") set(Magenta "${Esc}[35m") set(Cyan "${Esc}[36m") set(White "${Esc}[37m") set(BoldRed "${Esc}[1;31m") set(BoldGreen "${Esc}[1;32m") set(BoldYellow "${Esc}[1;33m") set(BoldBlue "${Esc}[1;34m") set(BoldMagenta "${Esc}[1;35m") set(BoldCyan "${Esc}[1;36m") set(BoldWhite "${Esc}[1;37m") endif() endif() calamares-3.2.41.1/CMakeModules/CalamaresAddBrandingSubdirectory.cmake000066400000000000000000000152121410275732300255550ustar00rootroot00000000000000# === 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. # # ### # # Support macros for creating Calamares branding components. # # Calamares branding components have two parts: # - a branding.desc file that tells Calamares how to describe the product # (e.g. strings like "Generic GNU/Linux") and the name of a QML file # (the "slideshow") that is displayed during installation. # - the QML files themselves, plus supporting images etc. # # Branding components can be created inside the Calamares source tree # (there is one example the `default/` branding, which is also connected # to the default configuration shipped with Calamares), but they can be # built outside of, and largely independently of, Calamares by using # these CMake macros. # # See the calamares-examples repository for more examples. # include( CMakeParseArguments) include( CMakeColors ) # Usage calamares_add_branding( [DIRECTORY ] [SUBDIRECTORIES ...]) # # Adds a branding component to the build: # - the component's top-level files are copied into the build-dir; # CMakeLists.txt is excluded from the glob. # - the component's top-level files are installed into the component branding dir # # The branding component lives in if given, otherwise the # current source directory. The branding component is installed # with the given , which is usually the name of the # directory containing the component, and which must match the # *componentName* in `branding.desc`. # # If SUBDIRECTORIES are given, then those are copied (each one level deep) # to the installation location as well, preserving the subdirectory name. function( calamares_add_branding NAME ) cmake_parse_arguments( _CABT "" "DIRECTORY" "SUBDIRECTORIES" ${ARGN} ) if (NOT _CABT_DIRECTORY) set(_CABT_DIRECTORY ".") endif() set( SUBDIRECTORY ${_CABT_DIRECTORY} ) set( _brand_dir ${_CABT_DIRECTORY} ) set( BRANDING_DIR share/calamares/branding ) set( BRANDING_COMPONENT_DESTINATION ${BRANDING_DIR}/${NAME} ) foreach( _subdir "" ${_CABT_SUBDIRECTORIES} ) file( GLOB BRANDING_COMPONENT_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${_brand_dir} "${_brand_dir}/${_subdir}/*" ) foreach( BRANDING_COMPONENT_FILE ${BRANDING_COMPONENT_FILES} ) set( _subpath ${_brand_dir}/${BRANDING_COMPONENT_FILE} ) if( NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${_subpath} ) 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}/ ) endif() endforeach() endforeach() message( "-- ${BoldYellow}Found ${CALAMARES_APPLICATION_NAME} branding component: ${BoldRed}${NAME}${ColorReset}" ) message( " ${Green}TYPE:${ColorReset} branding component" ) message( " ${Green}BRANDING_COMPONENT_DESTINATION:${ColorReset} ${BRANDING_COMPONENT_DESTINATION}" ) endfunction() # Usage calamares_add_branding_translations( [DIRECTORY ]) # # Adds the translations for a branding component to the build: # - the component's lang/ directory is scanned for .ts files # - the component's translations are installed into the component branding dir # # Translation files must be called calamares-_.ts . Optionally # the lang/ dir is found in the given instead of the current source # directory. function( calamares_add_branding_translations NAME ) cmake_parse_arguments( _CABT "" "DIRECTORY" "" ${ARGN} ) if (NOT _CABT_DIRECTORY) set(_CABT_DIRECTORY ".") endif() set( SUBDIRECTORY ${_CABT_DIRECTORY} ) set( _brand_dir ${_CABT_DIRECTORY} ) set( BRANDING_DIR share/calamares/branding ) set( BRANDING_COMPONENT_DESTINATION ${BRANDING_DIR}/${NAME} ) file( GLOB BRANDING_TRANSLATION_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIRECTORY}/lang/calamares-${NAME}_*.ts" ) if ( BRANDING_TRANSLATION_FILES ) qt5_add_translation( QM_FILES ${BRANDING_TRANSLATION_FILES} ) add_custom_target( branding-translation-${NAME} ALL DEPENDS ${QM_FILES} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/ COMMAND ${CMAKE_COMMAND} -E copy ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/lang/ ) install( FILES ${QM_FILES} DESTINATION ${BRANDING_COMPONENT_DESTINATION}/lang/ ) list( LENGTH BRANDING_TRANSLATION_FILES _branding_count ) message( " ${Green}BRANDING_TRANSLATIONS:${ColorReset} ${_branding_count} language(s)" ) endif() endfunction() # Usage calamares_add_branding_subdirectory( [NAME ] [SUBDIRECTORIES ...]) # # Adds a branding component from a subdirectory: # - if there is a CMakeLists.txt, use that (that CMakeLists.txt should # call suitable calamares_add_branding() and other macros to install # the branding component). # - otherwise assume a "standard" setup with top-level files and a lang/ # subdirectory for translations. # # If NAME is given, this is used instead of as the name of # the branding component. This is needed if is more than # one level deep, or to rename a component as it gets installed. # # If SUBDIRECTORIES are given, they are relative to , and are # copied (one level deep) to the install location as well. function( calamares_add_branding_subdirectory SUBDIRECTORY ) cmake_parse_arguments( _CABS "" "NAME" "SUBDIRECTORIES" ${ARGN} ) if (NOT _CABS_NAME) set(_CABS_NAME "${SUBDIRECTORY}") endif() if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/CMakeLists.txt" ) add_subdirectory( ${SUBDIRECTORY} ) elseif( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/branding.desc" ) calamares_add_branding( ${_CABS_NAME} DIRECTORY ${SUBDIRECTORY} SUBDIRECTORIES ${_CABS_SUBDIRECTORIES} ) if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/lang" ) calamares_add_branding_translations( ${_CABS_NAME} DIRECTORY ${SUBDIRECTORY} ) endif() else() message( "-- ${BoldYellow}Warning:${ColorReset} tried to add branding component subdirectory ${BoldRed}${SUBDIRECTORY}${ColorReset} which has no branding.desc." ) endif() message( "" ) endfunction() calamares-3.2.41.1/CMakeModules/CalamaresAddLibrary.cmake000066400000000000000000000105651410275732300230440ustar00rootroot00000000000000# === 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. # # ### # # Support functions for building plugins. # # Usage: # # calamares_add_library( # library-name # EXPORT_MACRO macro-name # TARGET_TYPE # EXPORT export-name # VERSION version # SOVERSION version # INSTALL_BINDIR dir # RESOURCES resource-file # SOURCES source-file... # UI ui-file... # LINK_LIBRARIES lib... # LINK_PRIVATE_LIBRARIES lib... # COMPILE_DEFINITIONS def... # [NO_INSTALL] # [NO_VERSION] # ) # # The COMPILE_DEFINITIONS are set on the resulting module with a suitable # flag (i.e. `-D`) so only state the name (optionally, also the value) # without a `-D` prefixed to it. Pass in a CMake list as needed. include( CMakeParseArguments ) include( CalamaresAutomoc ) function(calamares_add_library) # parse arguments (name needs to be saved before passing ARGN into the macro) set(NAME ${ARGV0}) set(options NO_INSTALL NO_VERSION) set(oneValueArgs NAME EXPORT_MACRO TARGET_TYPE EXPORT VERSION SOVERSION INSTALL_BINDIR RESOURCES) set(multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS) cmake_parse_arguments(LIBRARY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(LIBRARY_NAME ${NAME}) set(target ${LIBRARY_NAME}) # qt stuff include_directories(${CMAKE_CURRENT_LIST_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) # add resources from current dir if(LIBRARY_RESOURCES) list(APPEND LIBRARY_SOURCES ${LIBRARY_RESOURCES}) endif() # add target if(LIBRARY_TARGET_TYPE STREQUAL "STATIC") add_library(${target} STATIC ${LIBRARY_SOURCES}) elseif(LIBRARY_TARGET_TYPE STREQUAL "MODULE") add_library(${target} MODULE ${LIBRARY_SOURCES}) else() # default add_library(${target} SHARED ${LIBRARY_SOURCES}) endif() calamares_automoc(${target}) 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}) endif() if(LIBRARY_COMPILE_DEFINITIONS) set( _lib_definitions "${LIBRARY_EXPORT_MACRO}" ${LIBRARY_COMPILE_DEFINITIONS} ) set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${_lib_definitions}") endif() # add link targets target_link_libraries(${target} LINK_PUBLIC ${Calamares_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets ) if(LIBRARY_LINK_LIBRARIES) target_link_libraries(${target} LINK_PUBLIC ${LIBRARY_LINK_LIBRARIES}) endif() if(LIBRARY_LINK_PRIVATE_LIBRARIES) target_link_libraries(${target} LINK_PRIVATE ${LIBRARY_LINK_PRIVATE_LIBRARIES}) endif() # add soversion if(NOT LIBRARY_NO_VERSION) set_target_properties(${target} PROPERTIES VERSION ${LIBRARY_VERSION}) if(NOT LIBRARY_SOVERSION) set(LIBRARY_SOVERSION ${LIBRARY_VERSION}) endif() set_target_properties(${target} PROPERTIES SOVERSION ${LIBRARY_SOVERSION}) endif() if(NOT LIBRARY_INSTALL_BINDIR) set(LIBRARY_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}") set(LIBRARY_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") else() set(LIBRARY_INSTALL_LIBDIR "${LIBRARY_INSTALL_BINDIR}") endif() # make installation optional, maybe useful for dummy plugins one day if(NOT LIBRARY_NO_INSTALL) include(GNUInstallDirs) if(NOT LIBRARY_EXPORT) install( TARGETS ${target} RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR} LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR} ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR} ) else() install( TARGETS ${target} EXPORT ${LIBRARY_EXPORT} RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR} LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR} ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR} ) endif() endif() endfunction() calamares-3.2.41.1/CMakeModules/CalamaresAddModuleSubdirectory.cmake000066400000000000000000000265121410275732300252630ustar00rootroot00000000000000# === 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. # # ### # # 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 ) function( _calamares_add_module_subdirectory_impl ) set( SUBDIRECTORY ${ARGV0} ) # 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} ) file( GLOB MODULE_CONFIG_FILES RELATIVE ${_mod_dir} "${SUBDIRECTORY}/*.conf" ) # Module has indicated it should be skipped, show that in # the calling CMakeLists (which is src/modules/CMakeLists.txt normally). 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}/${_modulename} ) # Read module.desc, check that the interface type is supported. # # _mod_enabled boolean if the module should be built (only if the interface is supported) # _mod_reason is a human-readable explanation why it isn't built # _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 ${Calamares_WITH_PYTHONQT} ) set( _mod_reason "No PythonQt support" ) set( _mod_testing OFF ) elseif ( MODULE_INTERFACE MATCHES "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" ) set( _mod_enabled OFF ) set( _mod_reason "C++ modules must have a CMakeLists.txt instead" ) set( _mod_testing OFF ) elseif ( MODULE_INTERFACE MATCHES "process" ) set( _mod_enabled ON ) set( _mod_reason "" ) set( _mod_testing OFF ) else() set( _mod_enabled OFF ) set( _mod_reason "Unknown module interface '${MODULE_INTERFACE}'" ) set( _mod_testing OFF ) endif() if ( _mod_enabled ) # We glob all the files inside the subdirectory, and we make sure they are # synced with the bindir structure and installed. file( GLOB MODULE_FILES RELATIVE ${_mod_dir} "${SUBDIRECTORY}/*" ) foreach( MODULE_FILE ${MODULE_FILES} ) if( NOT IS_DIRECTORY ${_mod_dir}/${MODULE_FILE} ) configure_file( ${SUBDIRECTORY}/${MODULE_FILE} ${SUBDIRECTORY}/${MODULE_FILE} COPYONLY ) get_filename_component( FLEXT ${MODULE_FILE} EXT ) if( "${FLEXT}" STREQUAL ".conf" ) if( INSTALL_CONFIG ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${MODULE_FILE} DESTINATION ${MODULE_DATA_DESTINATION} ) endif() list( APPEND MODULE_CONFIG_FILES ${MODULE_FILE} ) else() install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${MODULE_FILE} DESTINATION ${MODULE_DESTINATION} ) endif() endif() endforeach() 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 ) if ( INSTALL_CONFIG ) set( _destination "${MODULE_DATA_DESTINATION}" ) else() set( _destination "[Build directory only]" ) endif() message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${MODULE_CONFIG_FILES} => ${_destination}" ) endif() message( "" ) # We copy over the lang directory, if any if( IS_DIRECTORY "${_mod_dir}/lang" ) install_calamares_gettext_translations( ${SUBDIRECTORY} SOURCE_DIR "${_mod_dir}/lang" FILENAME ${SUBDIRECTORY}.mo RENAME calamares-${SUBDIRECTORY}.mo ) endif() else() # Module disabled due to missing dependencies / unsupported interface set( SKIPPED_MODULES "${SUBDIRECTORY} (${_mod_reason})" PARENT_SCOPE ) endif() else() message( "-- ${BoldYellow}Warning:${ColorReset} tried to add module subdirectory ${BoldRed}${SUBDIRECTORY}${ColorReset} which has no CMakeLists.txt or module.desc." ) message( "" ) endif() # Check any config files for basic correctness if ( BUILD_TESTING AND MODULE_CONFIG_FILES ) set( _count 0 ) foreach( _config_file ${MODULE_CONFIG_FILES} ) set( _count_str "-${_count}" ) if ( _count EQUAL 0 ) set( _count_str "" ) endif() add_test( NAME config-${SUBDIRECTORY}${_count_str} COMMAND test_conf ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${_config_file} ) math( EXPR _count "${_count} + 1" ) endforeach() endif() # 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() 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() calamares-3.2.41.1/CMakeModules/CalamaresAddPlugin.cmake000066400000000000000000000214541410275732300226750ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Teo Mrnjavac # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # Calamares is Free Software: see the License-Identifier above. # # ### # # Convenience function for creating a C++ (qtplugin) module for Calamares. # This function provides cmake-time feedback about the plugin, adds # targets for compilation and boilerplate information, and creates # a module.desc with standard values (if the module.desc file exists, # that one is used instead, which happens only for unusual plugins). # # Usage: # # calamares_add_plugin( # module-name # TYPE # EXPORT_MACRO macro-name # SOURCES source-file... # UI ui-file... # LINK_LIBRARIES lib... # LINK_PRIVATE_LIBRARIES lib... # [COMPILE_DEFINITIONS def...] # [RESOURCES resource-file] # [REQUIRES module-name...] # [NO_INSTALL] # [NO_CONFIG] # [SHARED_LIB] # [EMERGENCY] # [WEIGHT w] # ) # # Function parameters: # - COMPILE_DEFINITIONS # Definitions are set on the resulting module with a suitable # flag (i.e. `-D`) so only state the name (optionally, also the value) # without a `-D` prefixed to it. # - RESOURCES # One (single!) filename for the RCC file for the plugin. # - REQUIRES # One or more names of modules which are added to the *requiredModules* # key in the descriptor. See *Module Requirements* in the module # documentation. # - NO_INSTALL # If this is set, the module is not installed by default; use this to # build testing modules or unit-testing modules. # - SHARED_LIB # In unusual circumstances, this function is used to add a library # rather than a normal Calamares module / plugin. # - 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 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} ) set( PLUGIN_DESTINATION ${CMAKE_INSTALL_LIBDIR}/calamares/modules/${PLUGIN_NAME} ) set( PLUGIN_DESC_FILE module.desc ) file( GLOB PLUGIN_CONFIG_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.conf" ) set( PLUGIN_DATA_DESTINATION share/calamares/modules ) set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) 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}" ) message( " ${Green}LINK_PRIVATE_LIBRARIES:${ColorReset} ${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) message( " ${Green}PLUGIN_DESTINATION:${ColorReset} ${PLUGIN_DESTINATION}" ) if( PLUGIN_CONFIG_FILES ) if( PLUGIN_NO_CONFIG ) message( FATAL_ERROR "${Red}NO_CONFIG${ColorReset} is set, with configuration ${Red}${PLUGIN_CONFIG_FILES}${ColorReset}" ) endif() set( _destination "(unknown)" ) if ( INSTALL_CONFIG AND NOT PLUGIN_NO_INSTALL ) set( _destination "${PLUGIN_DATA_DESTINATION}" ) elseif( NOT PLUGIN_NO_INSTALL ) # Not INSTALL_CONFIG set( _destination "[Build directory only]" ) else() set( _destination "[Skipping installation]" ) endif() message( " ${Green}CONFIGURATION_FILES:${ColorReset} ${PLUGIN_CONFIG_FILES} => ${_destination}" ) else() if( NOT PLUGIN_NO_CONFIG ) message( " ${Red}NO_CONFIG${ColorReset} should be set." ) endif() endif() if( PLUGIN_RESOURCES ) message( " ${Green}RESOURCES:${ColorReset} ${PLUGIN_RESOURCES}" ) endif() message( "" ) # 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" ) else() set( target_type "SHARED" ) endif() set( calamares_add_library_args "${target}" "EXPORT_MACRO" "${PLUGIN_EXPORT_MACRO}" "TARGET_TYPE" "${target_type}" "SOURCES" "${PLUGIN_SOURCES}" ) if( PLUGIN_UI ) list( APPEND calamares_add_library_args "UI" "${PLUGIN_UI}" ) endif() if( PLUGIN_LINK_LIBRARIES ) list( APPEND calamares_add_library_args "LINK_LIBRARIES" "${PLUGIN_LINK_LIBRARIES}" ) endif() if( PLUGIN_LINK_PRIVATE_LIBRARIES ) list( APPEND calamares_add_library_args "LINK_PRIVATE_LIBRARIES" "${PLUGIN_LINK_PRIVATE_LIBRARIES}" ) endif() if( PLUGIN_COMPILE_DEFINITIONS ) list( APPEND calamares_add_library_args "COMPILE_DEFINITIONS" ${PLUGIN_COMPILE_DEFINITIONS} ) endif() if ( PLUGIN_NO_INSTALL ) list( APPEND calamares_add_library_args "NO_INSTALL" ) endif() list( APPEND calamares_add_library_args "NO_VERSION" "INSTALL_BINDIR" "${PLUGIN_DESTINATION}" ) if( PLUGIN_RESOURCES ) list( APPEND calamares_add_library_args "RESOURCES" "${PLUGIN_RESOURCES}" ) endif() calamares_add_library( ${calamares_add_library_args} ) if ( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PLUGIN_DESC_FILE} ) configure_file( ${PLUGIN_DESC_FILE} ${PLUGIN_DESC_FILE} COPYONLY ) else() set( _file ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_DESC_FILE} ) set( _type ${PLUGIN_TYPE} ) file( WRITE ${_file} "# AUTO-GENERATED metadata file\n# Syntax is YAML 1.2\n---\n" ) file( APPEND ${_file} "type: \"${_type}\"\nname: \"${PLUGIN_NAME}\"\ninterface: \"qtplugin\"\nload: \"lib${target}.so\"\n" ) if ( PLUGIN_REQUIRES ) file( APPEND ${_file} "requiredModules:\n" ) foreach( _r ${PLUGIN_REQUIRES} ) file( APPEND ${_file} " - ${_r}\n" ) endforeach() endif() if ( PLUGIN_EMERGENCY ) file( APPEND ${_file} "emergency: true\n" ) endif() 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} ) 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() calamares-3.2.41.1/CMakeModules/CalamaresAddTest.cmake000066400000000000000000000033711410275732300223540ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # Calamares is Free Software: see the License-Identifier above. # # ### # # Support functions for building Calamares tests. # This extends KDE's ECM tests with some custom patterns. # # calamares_add_test( # # [GUI] # [RESOURCES FILE] # SOURCES # ) include( CMakeParseArguments ) include( CalamaresAutomoc ) 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}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set( TEST_NAME ${NAME} ) if( ECM_FOUND AND BUILD_TESTING ) ecm_add_test( ${TEST_SOURCES} ${TEST_RESOURCES} TEST_NAME ${TEST_NAME} LINK_LIBRARIES 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} Calamares::calamaresui Qt5::Gui ) endif() if( TEST_RESOURCES ) calamares_autorcc( ${TEST_NAME} ${TEST_RESOURCES} ) endif() endif() endfunction() calamares-3.2.41.1/CMakeModules/CalamaresAddTranslations.cmake000066400000000000000000000102341410275732300241120ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # Calamares is Free Software: see the License-Identifier above. # # ### # # This file has not yet been documented for use outside of Calamares itself. include( CMakeParseArguments ) # 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 # .mo files during install to avoid namespace clashes. # # install_calamares_gettext_translations( # NAME # SOURCE_DIR path/to/lang # FILENAME # [RENAME ] # ) # # For all of the (global) translation languages enabled for Calamares, # try installing $SOURCE_DIR/$lang/LC_MESSAGES/.mo into the # system gettext data directory (e.g. share/locale/), possibly renaming # filename.mo to renamed.mo in the process. function( install_calamares_gettext_translations ) # parse arguments ( name needs to be saved before passing ARGN into the macro ) set( NAME ${ARGV0} ) set( oneValueArgs NAME SOURCE_DIR FILENAME RENAME ) cmake_parse_arguments( TRANSLATION "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) if( NOT TRANSLATION_NAME ) set( TRANSLATION_NAME ${NAME} ) endif() if( NOT TRANSLATION_FILENAME ) set( TRANSLATION_FILENAME "${TRANSLATION_NAME}.mo" ) endif() if( NOT TRANSLATION_RENAME ) set( TRANSLATION_RENAME "${TRANSLATION_FILENAME}" ) endif() string( REGEX REPLACE ".mo$" ".po" TRANSLATION_SOURCE_FILENAME "${TRANSLATION_FILENAME}" ) 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}" ) foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) # Global 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() # 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/ ) endif() endforeach() endfunction() calamares-3.2.41.1/CMakeModules/CalamaresAutomoc.cmake000066400000000000000000000037161410275732300224360ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # Calamares is Free Software: see the License-Identifier above. # # ### # # Helper function for doing automoc, autouic, autorcc on targets, # and on the corresponding .ui or .rcc files. # # 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. # # 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 ) if ( CALAMARES_AUTOMOC_OPTIONS ) set_target_properties( ${TARGET} PROPERTIES AUTOMOC_MOC_OPTIONS "${CALAMARES_AUTOMOC_OPTIONS}" ) endif() endfunction() function(calamares_autouic TARGET) set_target_properties( ${TARGET} PROPERTIES AUTOUIC TRUE ) if ( CALAMARES_AUTOUIC_OPTIONS ) foreach(S ${ARGN}) set_property(SOURCE ${S} PROPERTY AUTOUIC_OPTIONS "${CALAMARES_AUTOUIC_OPTIONS}") 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() calamares-3.2.41.1/CMakeModules/CalamaresCheckModuleSelection.cmake000066400000000000000000000110351410275732300250510ustar00rootroot00000000000000# === 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() calamares-3.2.41.1/CMakeModules/ExtendedVersion.cmake000066400000000000000000000060051410275732300223160ustar00rootroot00000000000000# === 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() calamares-3.2.41.1/CMakeModules/FindCrypt.cmake000066400000000000000000000022241410275732300211110ustar00rootroot00000000000000# === 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 # LIBCRYPT_INCLUDE_DIR, root crypt include dir. Include crypt with crypt.h # LIBCRYPT_LIBRARY, the path to libcrypt # LIBCRYPT_FOUND, whether libcrypt was found if( CMAKE_SYSTEM MATCHES "FreeBSD" ) # FreeBSD has crypt(3) declared in unistd.h, which lives in # libc; the libcrypt found here is not used. find_path( CRYPT_INCLUDE_DIR NAMES unistd.h ) add_definitions( -DNO_CRYPT_H ) else() find_path( CRYPT_INCLUDE_DIR NAMES crypt.h HINTS ${CMAKE_INSTALL_INCLUDEDIR} NO_CACHE ) endif() find_library( CRYPT_LIBRARIES NAMES crypt HINTS ${CMAKE_INSTALL_LIBDIR} ) include( FindPackageHandleStandardArgs ) find_package_handle_standard_args( Crypt REQUIRED_VARS CRYPT_LIBRARIES CRYPT_INCLUDE_DIR ) mark_as_advanced( CRYPT_INCLUDE_DIR CRYPT_LIBRARIES ) calamares-3.2.41.1/CMakeModules/FindLIBPARTED.cmake000066400000000000000000000051521410275732300213210ustar00rootroot00000000000000# 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 # 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 AUTHOR ``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 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. include(CheckCSourceCompiles) include(CheckFunctionExists) if (LIBPARTED_INCLUDE_DIR AND LIBPARTED_LIBRARY) # Already in cache, be silent set(LIBPARTED_FIND_QUIETLY TRUE) endif (LIBPARTED_INCLUDE_DIR AND LIBPARTED_LIBRARY) FIND_PATH(LIBPARTED_INCLUDE_DIR parted.h PATH_SUFFIXES parted ) FIND_LIBRARY(LIBPARTED_LIBRARY NAMES parted) FIND_LIBRARY(LIBPARTED_FS_RESIZE_LIBRARY NAMES parted-fs-resize) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBPARTED DEFAULT_MSG LIBPARTED_LIBRARY LIBPARTED_INCLUDE_DIR) if (LIBPARTED_FS_RESIZE_LIBRARY) set(LIBPARTED_LIBS ${LIBPARTED_LIBRARY} ${LIBPARTED_FS_RESIZE_LIBRARY}) 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 # undo that unset(CMAKE_C_FLAGS) set(CMAKE_REQUIRED_INCLUDES ${LIBPARTED_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${LIBPARTED_LIBS}) CHECK_FUNCTION_EXISTS("ped_file_system_clobber" LIBPARTED_FILESYSTEM_SUPPORT) # parted < 3.0 CHECK_FUNCTION_EXISTS("ped_file_system_resize" LIBPARTED_FS_RESIZE_LIBRARY_SUPPORT) # parted != 3.0 MARK_AS_ADVANCED(LIBPARTED_LIBRARY LIBPARTED_INCLUDE_DIR LIBPARTED_FILESYSTEM_SUPPORT LIBPARTED_FS_RESIZE_LIBRARY LIBPARTED_FS_RESIZE_LIBRARY_SUPPORT) calamares-3.2.41.1/CMakeModules/FindLibPWQuality.cmake000066400000000000000000000026361410275732300223450ustar00rootroot00000000000000# === 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 # # This module defines # LibPWQuality_FOUND # LibPWQuality_LIBRARIES, where to find the library # LibPWQuality_INCLUDE_DIRS, where to find pwquality.h # find_package(PkgConfig) include(FindPackageHandleStandardArgs) 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 PATHS ${pc_pwquality_INCLUDE_DIRS} ) find_library(LibPWQuality_LIBRARY NAMES pwquality PATHS ${pc_pwquality_LIBRARY_DIRS} ) if(pc_pwquality_FOUND) set(LibPWQuality_LIBRARIES ${LibPWQuality_LIBRARY}) set(LibPWQuality_INCLUDE_DIRS ${LibPWQuality_INCLUDE_DIR} ${pc_pwquality_INCLUDE_DIRS}) endif() find_package_handle_standard_args(LibPWQuality DEFAULT_MSG LibPWQuality_INCLUDE_DIRS LibPWQuality_LIBRARIES ) mark_as_advanced(LibPWQuality_INCLUDE_DIRS LibPWQuality_LIBRARIES) set_package_properties( LibPWQuality PROPERTIES DESCRIPTION "Password quality checking library" URL "https://github.com/libpwquality/libpwquality" ) calamares-3.2.41.1/CMakeModules/FindPythonQt.cmake000066400000000000000000000140141410275732300215760ustar00rootroot00000000000000# === 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 # # Also sets PYTHONQT_INCLUDE_DIRS to add whatever directories # that are needed for extensions. # # Python is required find_package(PythonLibs) if(NOT PYTHONLIBS_FOUND) message(FATAL_ERROR "error: Python is required to build PythonQt") endif() # Cut X.Y[.Z] down to just X.Y string(REGEX REPLACE "^([0-9][0-9]*)\.([0-9][0-9]*)" "\\1.\\2@" _PYTHONLIBS_MAJMIN ${PYTHONLIBS_VERSION_STRING} ) string(REGEX REPLACE "@.*" "" PYTHONLIBS_MAJMIN ${_PYTHONLIBS_MAJMIN} ) if(NOT EXISTS "${PYTHONQT_INSTALL_DIR}") find_path(PYTHONQT_INSTALL_DIR NAMES include/PythonQt/PythonQt.h include/PythonQt5/PythonQt.h DOC "Directory where PythonQt was installed.") endif() # XXX Since PythonQt 3.0 is not yet cmakeified, depending # on how PythonQt is built, headers will not always be # installed in "include/PythonQt". That is why "src" # is added as an option. See [1] for more details. # [1] https://github.com/commontk/CTK/pull/538#issuecomment-86106367 find_path(PYTHONQT_INCLUDE_DIR PythonQt.h PATHS "${PYTHONQT_INSTALL_DIR}/include/PythonQt" "${PYTHONQT_INSTALL_DIR}/include/PythonQt5" "${PYTHONQT_INSTALL_DIR}/src" DOC "Path to the PythonQt include directory") find_path(PYTHONQT_ALL_INCLUDE_DIR PythonQt_QtAll.h PATHS "${PYTHONQT_INCLUDE_DIR}" "${PYTHONQT_INSTALL_DIR}" PATH_SUFFIXES "extensions/PythonQt_QtAll" "src" DOC "Path to the PythonQt 'all' header") if ( NOT PythonQt_FIND_QUIETLY ) message( STATUS "Searching for PythonQt (PythonLibs ${PYTHONLIBS_MAJMIN}) .." ) if ( PYTHONQT_INCLUDE_DIR ) message( STATUS " .. found include ${PYTHONQT_INCLUDE_DIR}" ) message( STATUS " .. found all include ${PYTHONQT_ALL_INCLUDE_DIR}" ) endif() endif() # Minimum v3.1 is needed find_library(PYTHONQT_LIBRARY_RELEASE NAMES PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt-Qt5-Python3 PythonQt PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "The PythonQt library." ) find_library(PYTHONQT_LIBRARY_DEBUG NAMES PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}JMIN${CTK_CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python3${CMAKE_DEBUG_POSTFIX} PythonQt-Qt5-Python3 PythonQt${CTK_CMAKE_DEBUG_POSTFIX} PythonQt${CMAKE_DEBUG_POSTFIX} PythonQt PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "The PythonQt library (debug build)." ) find_library(PYTHONQT_QTALL_LIBRARY_RELEASE NAMES PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt_QtAll-Qt5-Python3 PythonQt_QtAll PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "Full Qt bindings for the PythonQt library." ) find_library(PYTHONQT_QTALL_LIBRARY_DEBUG NAMES PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN}${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python${PYTHONLIBS_MAJMIN} PythonQt_QtAll-Qt5-Python3${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python3${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll-Qt5-Python3 PythonQt_QtAll${CTK_CMAKE_DEBUG_POSTFIX} PythonQt_QtAll${CMAKE_DEBUG_POSTFIX} PythonQt_QtAll PATHS "${PYTHONQT_INSTALL_DIR}/lib" DOC "Full Qt bindings for the PythonQt library (debug build)." ) set(PYTHONQT_LIBRARY) if(PYTHONQT_LIBRARY_RELEASE) list(APPEND PYTHONQT_LIBRARY optimized ${PYTHONQT_LIBRARY_RELEASE}) endif() if(PYTHONQT_LIBRARY_DEBUG) list(APPEND PYTHONQT_LIBRARY debug ${PYTHONQT_LIBRARY_DEBUG}) endif() set(PYTHONQT_QTALL_LIBRARY) if(PYTHONQT_QTALL_LIBRARY_RELEASE) list(APPEND PYTHONQT_QTALL_LIBRARY optimized ${PYTHONQT_QTALL_LIBRARY_RELEASE}) endif() if(PYTHONQT_QTALL_LIBRARY_DEBUG) list(APPEND PYTHONQT_QTALL_LIBRARY debug ${PYTHONQT_QTALL_LIBRARY_DEBUG}) endif() if ( NOT PythonQt_FIND_QUIETLY ) if ( PYTHONQT_LIBRARY ) message( STATUS " .. found library ${PYTHONQT_LIBRARY}" ) endif() if ( PYTHONQT_QTALL_LIBRARY ) message( STATUS " .. found qtall ${PYTHONQT_QTALL_LIBRARY}" ) endif() endif() mark_as_advanced(PYTHONQT_INSTALL_DIR) mark_as_advanced(PYTHONQT_INCLUDE_DIR) mark_as_advanced(PYTHONQT_LIBRARY_RELEASE) mark_as_advanced(PYTHONQT_LIBRARY_DEBUG) mark_as_advanced(PYTHONQT_QTALL_LIBRARY_RELEASE) mark_as_advanced(PYTHONQT_QTALL_LIBRARY_DEBUG) # On linux, also find libutil if(UNIX AND NOT APPLE) find_library(PYTHONQT_LIBUTIL util) mark_as_advanced(PYTHONQT_LIBUTIL) endif() # All upper case _FOUND variable is maintained for backwards compatibility. set(PYTHONQT_FOUND 0) set(PythonQt_FOUND 0) if(PYTHONQT_INCLUDE_DIR AND PYTHONQT_LIBRARY AND PYTHONQT_QTALL_LIBRARY) # Currently CMake'ified PythonQt only supports building against a python Release build. # This applies independently of CTK build type (Release, Debug, ...) add_definitions(-DPYTHONQT_USE_RELEASE_PYTHON_FALLBACK) set(PYTHONQT_FOUND 1) set(PythonQt_FOUND ${PYTHONQT_FOUND}) set(PYTHONQT_LIBRARIES ${PYTHONQT_LIBRARY} ${PYTHONQT_LIBUTIL} ${PYTHONQT_QTALL_LIBRARY}) set(PYTHONQT_INCLUDE_DIRS ${PYTHONQT_INCLUDE_DIR}) if(PYTHONQT_ALL_INCLUDE_DIR) list(APPEND PYTHONQT_INCLUDE_DIRS ${PYTHONQT_ALL_INCLUDE_DIR}) endif() elseif(NOT PythonQt_FIND_QUIETLY) set(_missing "") if (NOT PYTHONQT_INCLUDE_DIR) list(APPEND _missing "includes") endif() if (NOT PYTHONQT_LIBRARY) list(APPEND _missing "library") endif() if (NOT PYTHONQT_QTALL_LIBRARY) list(APPEND _missing "qtall") endif() message(STATUS "PythonQt not found, missing components ${_missing}") endif() calamares-3.2.41.1/CMakeModules/FindYAMLCPP.cmake000066400000000000000000000047711410275732300211260ustar00rootroot00000000000000# === 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 # YAMLCPP_FOUND, if false, do not try to link to yaml-cpp # YAMLCPP_LIBRARY, where to find yaml-cpp # YAMLCPP_INCLUDE_DIR, where to find yaml.h # There is also one IMPORTED library target, # 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 ...). # # 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) endif() # find the yaml-cpp include directory find_path(YAMLCPP_INCLUDE_DIR yaml-cpp/yaml.h PATH_SUFFIXES include PATHS ~/Library/Frameworks/yaml-cpp/include/ /Library/Frameworks/yaml-cpp/include/ /usr/local/include/ /usr/include/ /sw/yaml-cpp/ # Fink /opt/local/yaml-cpp/ # DarwinPorts /opt/csw/yaml-cpp/ # Blastwave /opt/yaml-cpp/ ${YAMLCPP_DIR}/include/) # find the yaml-cpp library find_library(YAMLCPP_LIBRARY NAMES ${YAMLCPP_STATIC} yaml-cpp PATH_SUFFIXES lib64 lib PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt ${YAMLCPP_DIR}/lib) # handle the QUIETLY and REQUIRED arguments and set YAMLCPP_FOUND to TRUE if all listed variables are TRUE include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(YAMLCPP DEFAULT_MSG YAMLCPP_INCLUDE_DIR YAMLCPP_LIBRARY) mark_as_advanced(YAMLCPP_INCLUDE_DIR YAMLCPP_LIBRARY) # Add an imported target if( 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::yamlcpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${YAMLCPP_INCLUDE_DIR} ) endif() endif() calamares-3.2.41.1/CMakeModules/KPMcoreHelper.cmake000066400000000000000000000026551410275732300216570ustar00rootroot00000000000000# === 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() calamares-3.2.41.1/CONTRIBUTING.md000066400000000000000000000107121410275732300161260ustar00rootroot00000000000000 # 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. calamares-3.2.41.1/CalamaresConfig.cmake.in000066400000000000000000000060651410275732300203300ustar00rootroot00000000000000# 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 # # 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 @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() # Need various CMake files that are installed alongside this one. list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) ### 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() # 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@) calamares-3.2.41.1/LICENSES/000077500000000000000000000000001410275732300151015ustar00rootroot00000000000000calamares-3.2.41.1/LICENSES/BSD-2-Clause.txt000066400000000000000000000024541410275732300176300ustar00rootroot00000000000000 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. calamares-3.2.41.1/LICENSES/CC-BY-4.0.txt000066400000000000000000000406561410275732300167510ustar00rootroot00000000000000Creative 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. calamares-3.2.41.1/LICENSES/CC0-1.0.txt000066400000000000000000000154041410275732300165070ustar00rootroot00000000000000Creative 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. calamares-3.2.41.1/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001045131410275732300203110ustar00rootroot00000000000000 GNU 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. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . calamares-3.2.41.1/LICENSES/LGPL-2.0-only.txt000066400000000000000000000621261410275732300176630ustar00rootroot00000000000000 The KD Tools Library is Copyright (C) 2001-2010 Klaralvdalens Datakonsult AB. You may use, distribute and copy the KD Tools Library under the terms of GNU Library General Public License version 2, which is displayed below. ------------------------------------------------------------------------- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 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. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] 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 Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 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 a program 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. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, 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 companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. 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, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library 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 compile 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) 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. c) 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. d) 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 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. 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 to 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 Library 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! calamares-3.2.41.1/LICENSES/LGPL-2.1-only.txt000066400000000000000000000624671410275732300176740ustar00rootroot00000000000000GNU 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! calamares-3.2.41.1/LICENSES/LGPL-3.0-or-later.txt000066400000000000000000000164071410275732300204310ustar00rootroot00000000000000GNU 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. calamares-3.2.41.1/LICENSES/MIT.txt000066400000000000000000000021241410275732300162720ustar00rootroot00000000000000MIT 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. calamares-3.2.41.1/README.md000066400000000000000000000071351410275732300151610ustar00rootroot00000000000000 # 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) [![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/LICENSE) | [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) | |:--:|:--:|:--:|:--:|:--:|:--:| > 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. ## Target Audience 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) * [![Chat on IRC](https://img.shields.io/badge/IRC-Libera.Chat%20%23calamares-green)](https://kiwiirc.com/client/irc.libera.chat/#calamares) calamares-3.2.41.1/calamares.desktop000066400000000000000000000215411410275732300172220ustar00rootroot00000000000000[Desktop Entry] Type=Application Version=1.0 Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares Exec=sh -c "pkexec calamares" Comment=Calamares — System Installer Icon=calamares Terminal=false StartupNotify=true Categories=Qt;System; X-AppStream-Ignore=true Name[ar]=تثبيت النظام Icon[ar]=كالامارس GenericName[ar]=مثبت النظام Comment[ar]=كالامارس - مثبت النظام Name[as]=চিছটেম ইনস্তল কৰক Icon[as]=কেলামাৰেচ GenericName[as]=চিছটেম ইনস্তলাৰ Comment[as]=কেলামাৰেচ — চিছটেম​ ইনস্তলাৰ 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[be]=Усталяваць сістэму Icon[be]=calamares GenericName[be]=Усталёўшчык сістэмы Comment[be]=Calamares — усталёўшчык сістэмы Name[bg]=Инсталирай системата Icon[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[da]=Installér system Icon[da]=calamares GenericName[da]=Systeminstallationsprogram Comment[da]=Calamares — Systeminstallationsprogram Name[de]=System installieren Icon[de]=calamares GenericName[de]=Installation des Betriebssystems Comment[de]=Calamares - Installation des Betriebssystems Name[el]=Εγκατάσταση συστήματος Icon[el]=calamares GenericName[el]=Εγκατάσταση συστήματος Comment[el]=Calamares — Εγκατάσταση συστήματος Name[en_GB]=Install System Icon[en_GB]=calamares GenericName[en_GB]=System Installer Comment[en_GB]=Calamares — System Installer Name[es]=Instalar Sistema Icon[es]=calamares GenericName[es]=Instalador del Sistema Comment[es]=Calamares — Instalador del Sistema Name[et]=Paigalda süsteem Icon[et]=calamares GenericName[et]=Süsteemipaigaldaja Comment[et]=Calamares — süsteemipaigaldaja Name[eu]=Sistema instalatu Icon[eu]=calamares GenericName[eu]=Sistema instalatzailea Comment[eu]=Calamares - sistema instalatzailea Name[fa]=نصب سامانه Icon[fa]=کالامارس GenericName[fa]=نصب‌کنندهٔ سامانه Comment[fa]=کالامارس — نصب‌کنندهٔ سامانه Name[es_PR]=Instalar el sistema 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 Comment[gl]=Calamares — Instalador de sistemas Name[he]=התקנת מערכת Icon[he]=calamares GenericName[he]=אשף התקנה Comment[he]=Calamares - אשף התקנה Name[hi]=सिस्टम इंस्टॉल करें Icon[hi]=calamares GenericName[hi]=सिस्टम इंस्टॉलर Comment[hi]=Calamares — सिस्टम इंस्टॉलर Name[hr]=Instaliraj sustav Icon[hr]=calamares GenericName[hr]=Instalacija sustava Comment[hr]=Calamares — Instalacija sustava Name[ie]=Installar li sistema Icon[ie]=calamares GenericName[ie]=Installator del sistema Comment[ie]=Calamares — Installator del sistema Name[hu]=Rendszer telepítése Icon[hu]=calamares GenericName[hu]=Rendszertelepítő Comment[hu]=Calamares – Rendszertelepítő Name[id]=Instal Sistem Icon[id]=calamares GenericName[id]=Pemasang Comment[id]=Calamares — Pemasang Sistem 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[ja]=システムをインストール Icon[ja]=calamares GenericName[ja]=システムインストーラー Comment[ja]=Calamares — システムインストーラー Name[ko]=시스템 설치 Icon[ko]=깔라마레스 GenericName[ko]=시스템 설치 관리자 Comment[ko]=깔라마레스 — 시스템 설치 관리자 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]=Системен Инсталер Comment[mk]=Calamares - Системен Инсталер Name[ml]=സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്യുക Icon[ml]=കലാമാരേസ് GenericName[ml]=സിസ്റ്റം ഇൻസ്റ്റാളർ Comment[ml]=കലാമാരേസ് - സിസ്റ്റം ഇൻസ്റ്റാളർ Name[nb]=Installer System Icon[nb]=calamares GenericName[nb]=Systeminstallatør Comment[nb]=Calamares-systeminstallatør Name[nl]=Installeer systeem Icon[nl]=calamares GenericName[nl]=Installatieprogramma Comment[nl]=Calamares — Installatieprogramma 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[pl]=Zainstaluj system Icon[pl]=calamares GenericName[pl]=Instalator systemu Comment[pl]=Calamares — Instalator systemu 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[ro]=Instalează sistemul Icon[ro]=calamares GenericName[ro]=Instalator de sistem Comment[ro]=Calamares — Instalator de sistem Name[ru]=Установить систему Icon[ru]=calamares GenericName[ru]=Установщик системы Comment[ru]=Calamares - Установщик системы Name[sk]=Inštalovať systém Icon[sk]=calamares GenericName[sk]=Inštalátor systému Comment[sk]=Calamares — Inštalátor systému Name[sl]=Namesti sistem 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[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[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]=系统安装程序 Comment[zh_CN]=Calamares — 系统安装程序 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 calamares-3.2.41.1/calamares.desktop.in000066400000000000000000000004721410275732300176270ustar00rootroot00000000000000[Desktop Entry] Type=Application Version=1.0 Name=Install System GenericName=System Installer Keywords=calamares;system;installer; TryExec=calamares Exec=sh -c "pkexec calamares" Comment=Calamares — System Installer Icon=calamares Terminal=false StartupNotify=true Categories=Qt;System; X-AppStream-Ignore=true calamares-3.2.41.1/ci/000077500000000000000000000000001410275732300142675ustar00rootroot00000000000000calamares-3.2.41.1/ci/AppImage.sh000077500000000000000000000234101410275732300163110ustar00rootroot00000000000000#! /bin/sh # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # 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 # 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 ### USAGE # # Shell script to help build an AppImage for Calamares. # # Usage: # AppImage.sh [-T|--tools-dir ] # [-C|--cmake-args ] # [-c|--config-dir ] # [-s|--skip-build] # [-p|--with-python] # # Multiple --cmake-args arguments will be collected together and passed to # CMake before building the application. # # Use --tools-dir to indicate where the linuxdeploy tools are located. # # Use --config to copy a config-directory (with settings.conf and others) # into the resulting image, # # Option --skip-build assumes that there is an already-built Calamares # available in the AppImage build directory; use this when you are, e.g. # re-packaging the image with different configuration. Option --with-python # adds the Conda Python packaging ecosystem to the AppImage, which will make # it **more** portable by disconnecting from the system Python libraries. # # The build process for AppImage proceeds in a directory build-AppImage # that is created in the current directory. # # The resulting AppImage has XDG_* enabled, and appends the in-image # directories to the current environment. You can set XDG_* in the # current environment to use other configurations and data, e.g. the # data in the current live environment. Or leave it unset, to try # Calamares with only the configuration contained in the AppImage. # ### END USAGE TOOLS_DIR="." CMAKE_ARGS="" DO_REBUILD="true" DO_CONDA="false" CONFIG_DIR="" while test "$#" -gt 0 do case "x$1" in x--help|x-h) sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" return 0 ;; x--tools-dir|x-T) TOOLS_DIR="$2" shift ;; x--cmake-args|x-C) CMAKE_ARGS="$CMAKE_ARGS $2" shift ;; x--config-dir|x-c) CONFIG_DIR="$2" shift ;; x--skip-build|x-s) DO_REBUILD="false" ;; x--with-python|x-p) DO_CONDA="true" ;; *) echo "! Unknown argument '$1'." exit 1 ;; esac test "$#" -gt 0 || { echo "! Missing arguments."; exit 1; } shift done ### Check where we're running # BIN_DIR=$( cd $( dirname "$0" ) && pwd -P ) test -d "$BIN_DIR" || { echo "! Could not find BIN_DIR"; exit 1; } test -f "$BIN_DIR/AppImage.sh" || { echo "! $BIN_DIR does not have AppImage.sh"; exit 1; } SRC_DIR=$( cd "$BIN_DIR/.." && pwd -P ) test -d "$SRC_DIR" || { echo "! Could not find SRC_DIR"; exit 1; } test -d "$SRC_DIR/ci" || { echo "! $SRC_DIR isn't a top-level Calamares checkout"; exit 1; } test -f "$SRC_DIR/CMakeLists.txt" || { echo "! SRC_DIR is missing CMakeLists.txt"; exit 1; } ### Check pre-requisites # BUILD_DIR=build-AppImage test -d "$BUILD_DIR" || mkdir -p "$BUILD_DIR" test -d "$BUILD_DIR" || { echo "! Could not create $BUILD_DIR"; exit 1; } TOOLS_LIST="linuxdeploy-x86_64.AppImage linuxdeploy-plugin-qt-x86_64.AppImage" $DO_CONDA && TOOLS_LIST="$TOOLS_LIST linuxdeploy-plugin-conda.sh" for tool in $TOOLS_LIST do if test -x "$BUILD_DIR/$tool" ; then # This tool is ok : else if test -f "$TOOLS_DIR/$tool" ; then cp "$TOOLS_DIR/$tool" "$BUILD_DIR/$tool" || exit 1 else fetch=$( grep "^# URL .*$tool\$" "$0" | sed 's/# URL *//' ) curl -L -o "$BUILD_DIR/$tool" "$fetch" fi chmod +x "$BUILD_DIR/$tool" test -x "$BUILD_DIR/$tool" || { echo "! Missing tool $tool in tools-dir $TOOLS_DIR"; exit 1; } fi done if test -n "$CONFIG_DIR" ; then test -f "$CONFIG_DIR/settings.conf" || { echo "! No settings.conf in $CONFIG_DIR"; exit 1; } fi ### Clean up build-directory # rm -rf "$BUILD_DIR/AppDir" if $DO_REBUILD ; then rm -rf "$BUILD_DIR/build" mkdir "$BUILD_DIR/build" || { echo "! Could not create $BUILD_DIR/build for the cmake-build."; exit 1; } else test -d "$BUILD_DIR/build" || { echo "! No build found in $BUILD_DIR, but --skip-build is given."; exit 1; } test -x "$BUILD_DIR/build/calamares" || { echo "! No complete build found in $BUILD_DIR/build ."; exit 1; } fi mkdir "$BUILD_DIR/AppDir" || { echo "! Could not create $BUILD_DIR/AppDir for the AppImage install."; exit 1; } LOG_FILE="$BUILD_DIR/AppImage.log" rm -f "$LOG_FILE" { echo "# Calamares build started" `date` ; echo "# .. build directory $BUILD_DIR"; echo "# .. log file $LOG_FILE"; } > "$LOG_FILE" cat "$LOG_FILE" ### Python Support # # if $DO_CONDA ; then export CONDA_CHANNELS="conda-forge;anaconda" export CONDA_PACKAGES="gettext;py-boost" ( cd "$BUILD_DIR" && ./linuxdeploy-x86_64.AppImage --appdir=AppDir/ --plugin=conda ) . "$BUILD_DIR/AppDir/usr/conda/bin/activate" fi ### Build Calamares # if $DO_REBUILD ; then echo "# Running cmake ..." ( cd "$BUILD_DIR/build" && cmake "$SRC_DIR" -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib $CMAKE_ARGS ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run CMake"; exit 1; } echo "# Running make ..." ( cd "$BUILD_DIR/build" && make -j4 ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run make"; exit 1; } fi echo "# Running make install ..." ( cd "$BUILD_DIR/build" && make install DESTDIR=../AppDir ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not run make install"; exit 1; } ### Modify installation # IMAGE_DIR="$BUILD_DIR/AppDir" # Munge the desktop file to not use absolute paths or pkexec sed -i \ -e 's+^Exec=.*+Exec=calamares+' \ -e 's+^Name=.*+Name=Calamares+' \ "$IMAGE_DIR"/usr/share/applications/calamares.desktop # Replace the executable with a shell-proxy test -x "$IMAGE_DIR/usr/bin/calamares" || { echo "! Does not seem to have installed calamares"; exit 1; } mv "$IMAGE_DIR/usr/bin/calamares" "$IMAGE_DIR/usr/bin/calamares.bin" cat > "$IMAGE_DIR/usr/bin/calamares" <<"EOF" #! /bin/sh # # Calamares proxy-script. Runs Calamares with XDG support enabled, # and in-image XDG dirs set up so that compiled-in configuration can be used. test -n "${XDG_DATA_DIRS}" && XDG_DATA_DIRS="${XDG_DATA_DIRS}:" test -n "${XDG_CONFIG_DIRS}" $$ XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}:" export XDG_DATA_DIRS="${XDG_DATA_DIRS}${APPDIR}/usr/share/" export XDG_CONFIG_DIRS="${XDG_CONFIG_DIRS}${APPDIR}/etc/:${APPDIR}/usr/share/" export PYTHONPATH="${APPDIR}/usr/lib:" cd "$APPDIR" exec "$APPDIR"/usr/bin/calamares.bin -X "$@" EOF chmod 755 "$IMAGE_DIR/usr/bin/calamares" test -x "$IMAGE_DIR/usr/bin/calamares" || { echo "! Does not seem to have proxy for calamares"; exit 1; } ### Install additional files # PLUGIN_DIR=$( qmake -query QT_INSTALL_PLUGINS ) for plugin in \ libpmsfdiskbackendplugin.so \ libpmdummybackendplugin.so \ libpmlibpartedbackendplugin.so do # Warning, but not fatal: generally you only have two out of three available # depending on the KPMCore version. cp "$PLUGIN_DIR/$plugin" "$IMAGE_DIR/usr/lib" 2> /dev/null || { echo "! Could not copy KPMCore plugin $plugin"; } done # Install configuration files ETC_DIR="$IMAGE_DIR"/etc/calamares mkdir -p "$ETC_DIR" test -d "$ETC_DIR" || { echo "! Could not create /etc/calamares in image."; exit 1; } if test -z "$CONFIG_DIR" ; then echo "# Using basic settings.conf" cp "$SRC_DIR/settings.conf" "$ETC_DIR" else test -f "$CONFIG_DIR/settings.conf" || { echo "! No settings.conf in $CONFIG_DIR"; exit 1; } mkdir -p "$ETC_DIR/modules" cp "$CONFIG_DIR/settings.conf" "$ETC_DIR" test -d "$CONFIG_DIR/modules" && cp -r "$CONFIG_DIR/modules" "$ETC_DIR" test -d "$CONFIG_DIR/branding" && cp -r "$CONFIG_DIR/branding" "$IMAGE_DIR/usr/share/calamares" fi ### Build the AppImage # # echo "# Building AppImage" ( export QT_SELECT=qt5 # Otherwise might pick Qt4 in image export LD_LIBRARY_PATH=AppDir/usr/lib # RPATH isn't set in the executable cd "$BUILD_DIR" && ./linuxdeploy-x86_64.AppImage --appdir=AppDir/ --plugin=qt --output=appimage ) >> "$LOG_FILE" 2>&1 || { tail -10 "$LOG_FILE" ; echo "! Could not create image"; exit 1; } echo "# Created in $BUILD_DIR/Calamares-x86_64.AppImage" echo "# .. log file at $LOG_FILE" exit 0 ### Database for installation # # URL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage # URL https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage # URL https://raw.githubusercontent.com/TheAssassin/linuxdeploy-plugin-conda/master/linuxdeploy-plugin-conda.sh calamares-3.2.41.1/ci/RELEASE.md000066400000000000000000000133271410275732300156770ustar00rootroot00000000000000# Calamares Release Process > Calamares releases are now rolling when-they-are-ready releases. > 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) 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. * Commit both. This is usually done with commit-message *Changes: pre-release housekeeping*. ## (2) Release Preparation * Make sure all tests pass. ``` make make test ``` Note that *all* means all-that-make-sense. The partition-manager tests need 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. 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, - if translations are up-to-date and translators have had enough time to chase new strings, - that the build is successful (with gcc and clang, if available), - tests pass, - tarball can be created, - tarball can be signed. On success, it prints out a suitable signature- and SHA256 blurb for use in the release announcement. ## (3) Release Follow the instructions printed by the release script. * Push the tags. * Create a new release on GitHub. * Upload tarball and signature. * Publish release article on `calamares.io`. * 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 *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*. * Commit and push that, usually with the message *Changes: post-release housekeeping*. ``` # 3.2.XX (unreleased) # This release contains contributions from (alphabetically by first name): - No external contributors yet ## Core ## - No core changes yet ## Modules ## - No module changes yet ``` # 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. calamares-3.2.41.1/ci/RELEASE.sh000077500000000000000000000124211410275732300157060ustar00rootroot00000000000000#! /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. # # Assumes that the version in CMakeLists.txt has been bumped, # and that a release of that version is desired. # # None of the "update stuff" is done by this script; in preparation # for the release, you should have already done: # * updating the version # * pulling translations # * updating the language list # * switching to the right branch # The release can fail for various reasons: doesn't build, tests fail, # or the string freeze has been violated. # # You can influence the script a little with these options: # * `-B` do not build (before tagging) # * `-P` do not package (tag, sign, tarball) # * `-T` do not respect string freeze # # The build / package settings can be influenced via environment variables: # * BUILD_DEFAULT set to `false` to avoid first build with gcc # * BUILD_CLANG set to `false` to avoid second build with clang # * BUILD_ONLY set to `true` to break after building # ### END USAGE test -d .git || { echo "Not at top-level." ; exit 1 ; } test -d src/modules || { echo "No src/modules." ; exit 1 ; } which cmake > /dev/null 2>&1 || { echo "No cmake(1) available." ; exit 1 ; } test -z "$BUILD_DEFAULT" && BUILD_DEFAULT=true test -z "$BUILD_CLANG" && BUILD_CLANG=true test -z "$BUILD_ONLY" && BUILD_ONLY=false STRING_FREEZE=true while getopts "hBPT" opt ; do case "$opt" in h|\?) sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" return 0 ;; B) BUILD_DEFAULT=false BUILD_CLANG=false ;; P) BUILD_ONLY=true ;; T) STRING_FREEZE=false ;; esac done if $STRING_FREEZE ; then sh ci/txcheck.sh || { echo "! String freeze failed." ; exit 1 ; } fi ### Setup # # BUILDDIR=$(mktemp -d --suffix=-build --tmpdir=.) KEY_ID="CFDDC96F12B1915C" # Try to make gpg cache the signing key, so we can leave the process # to run and sign. rm -f CHANGES.gpg gpg -s -u $KEY_ID CHANGES ### Build with default compiler # # 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 ; } fi ### Build with clang # # if test "x$BUILD_CLANG" = "xtrue" ; then if which clang++ > /dev/null 2>&1 ; then # Do build again with clang rm -rf "$BUILDDIR" mkdir "$BUILDDIR" || { echo "Could not create build directory." ; exit 1 ; } ( cd "$BUILDDIR" && CC=clang CXX=clang++ cmake .. && make -j4 ) || { echo "Could not perform test-build in $BUILDDIR." ; exit 1 ; } ( cd "$BUILDDIR" && make test ) || { echo "Tests failed in $BUILDDIR (clang)." ; exit 1 ; } fi fi if test "x$BUILD_ONLY" = "xtrue" ; then echo "Builds completed, release stopped. Build remains in $BUILDDIR ." exit 1 fi if test -f "$BUILDDIR/CMakeCache.txt" ; then # Some build has created it, so that's good : 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 ; } 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 ; } ### 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. git tag -u "$KEY_ID" -m "Release v$V" "v$V" || { echo "Could not sign tag v$V." ; exit 1 ; } ### Create the tarball # # TAR_V="calamares-$V" TAR_FILE="$TAR_V.tar.gz" git archive -o "$TAR_FILE" --prefix "$TAR_V/" "v$V" || { echo "Could not create tarball." ; exit 1 ; } test -f "$TAR_FILE" || { echo "Tarball was not created." ; exit 1 ; } SHA256=$(sha256sum "$TAR_FILE" | cut -d" " -f1) ### Build the tarball # # D=$(date +%Y%m%d-%H%M%S) 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 ; } gpg -s -u $KEY_ID --detach --armor $TAR_FILE # Sign the tarball ### Cleanup # rm -rf "$BUILDDIR" # From test-builds rm -rf "$TMPDIR" # From tarball ### Print subsequent instructions # # cat < # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # Do not create a backup file suffix=none indent=spaces=4 # Brackets style=break add-brackets # Spaces pad-paren-in pad-header align-pointer=type calamares-3.2.41.1/ci/calamaresstyle000077500000000000000000000051271410275732300172330ustar00rootroot00000000000000#!/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-8 or later # # You can pass in directory names, in which case the files # in that directory (NOT below it) are processed. # LANG=C 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.base" || { echo "! No .clang-format support files in $TOPDIR" ; exit 1 ; } AS=$( which astyle ) # Allow specifying CF_VERSIONS outside already CF_VERSIONS="$CF_VERSIONS clang-format-8 clang-format80 clang-format90 clang-format-9.0.1 clang-format" for _cf in $CF_VERSIONS do # Not an error if this particular clang-format isn't found 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 ($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 8 is ok # Version 9 is ok # Later versions change some defaults so need extra wrangling. # .. there are extra files that are appended to the settings, per # .. clang-format version. format_version=`"$CF" --version | tr -dc '[^.0-9]' | cut -d . -f 1` case "$format_version" in [0-7] ) echo "! Clang-format version 8+ required" exit 1 ;; [89] ) : ;; * ) echo "! Clang-format version '$format_version' unsupported." exit 1 ;; esac _fmt="$TOPDIR/.clang-format" cp "$_fmt.base" "$_fmt" for f in "$extra_settings" ; do test -f "$_fmt.$f" && cat "$_fmt.$f" >> "$_fmt" done ### FILE PROCESSING # # set -e any_dirs=no for d in "$@" do test -d "$d" && any_dirs=yes done style_some() { if test -n "$*" ; then $AS --options=$BASEDIR/astylerc --quiet "$@" $CF -i -style=file "$@" fi } if test "x$any_dirs" = "xyes" ; then for d in "$@" do if test -d "$d" ; then style_some $( find "$d" -maxdepth 1 -type f -name '*.cpp' -o -name '*.h' ) else style_some "$d" fi done else style_some "$@" fi ### CLANG-FORMAT-WRANGLING # # Restore the original .clang-format cp "$_fmt.base" "$_fmt" calamares-3.2.41.1/ci/configvalidator.py000066400000000000000000000076761410275732300200340ustar00rootroot00000000000000#! /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) calamares-3.2.41.1/ci/coverity-model.c000066400000000000000000000004171410275732300173770ustar00rootroot00000000000000/* Model file for Coverity checker. See https://scan.coverity.com/tune 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 */ calamares-3.2.41.1/ci/txcheck.sh000066400000000000000000000106611410275732300162600ustar00rootroot00000000000000#! /bin/sh ### LICENSE # === This file is part of Calamares - === # # 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. # ### END LICENSE ### USAGE # # Does the translation tag (from a previous txpush) exist? # This assumes that the release host has also locally done # a translations push, which works for the current development # workflow .. but it could be improved by looking for one of # the typical txpush log messages instead of the tag. # # Use --cleanup as an argument to clean things up. # # Normal use: # $ sh ci/txcheck.sh # If there are differences, fix them and then clean up: # $ sh ci/txcheck.sh --cleanup # ### END USAGE # The files that are translated; should match the contents of .tx/config TX_FILE_LIST="lang/calamares_en.ts lang/python.pot calamares.desktop" ### COMMAND ARGUMENTS # # We need to define tx_cleanup for the --cleanup argument, although it's # normally used much later in the script. tx_cleanup() { # Cleanup artifacs of checking git worktree remove --force build-txcheck-head git worktree remove --force build-txcheck-prev git branch -D build-txcheck-head > /dev/null 2>&1 } if test "x$1" = "x--cleanup" ; then tx_cleanup exit 0 fi if test "x$1" = "x--help" ; then sed -e '1,/USAGE/d' -e '/END.USAGE/,$d' < "$0" fi test -z "$1" || { echo "! Usage: txcheck.sh [--cleanup]" ; exit 1 ; } ### FIND EXECUTABLES # # XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # Distinguish GNU date from BSD date if date +%s -d "1 week ago" > /dev/null 2>&1 ; then last_week() { date +%s -d "1 week ago" ; } else last_week() { date -v1w +%s; } fi # Distinguish GNU SHA executables from BSD ones if which sha256sum > /dev/null 2>&1 ; then SHA256=sha256sum else SHA256=sha256 fi ### CHECK WORKING DIRECTORY # # if git describe translation > /dev/null 2>&1 ; then : else echo "! No 'translation' tag exists for enforcing the string-freeze." exit 1 fi # The tag exists, so now check that there's no unsaved changes if test `git describe` = `git describe --dirty` ; then : else # Don't want any local changes, since those won't be # reflected in the worktrees and we might miss a string change. echo "! There are local changes." exit 1 fi # No unsaved changes; enforce a string freeze of one week DATE_PREV=$( git log -1 translation --date=unix | sed -e '/^Date:/s+.*:++p' -e d ) DATE_HEAD=$( last_week ) test "$DATE_PREV" -le "$DATE_HEAD" || { echo "! Translation tag has not aged enough." ; git log -1 translation ; exit 1 ; } # Tag is good, check that necessary files exist. The list of # files is hard-coded, but should match what is in the Transifex config. test -f ".tx/config" || { echo "! No Transifex configuration is present." ; exit 1 ; } for f in $TX_FILE_LIST ; do test -f $f || { echo "! Translation file '$f' does not exist." ; exit 1 ; } done ### COMPARE TRANSLATIONS # # # The state of translations; assume that sha256 is enough # to distinguish changed translations when we cat all the # string sources together. tx_sum() { CURDIR=`pwd` WORKTREE_NAME="$1" WORKTREE_TAG="$2" git worktree add $WORKTREE_NAME $WORKTREE_TAG > /dev/null 2>&1 || { echo "! Could not create worktree." ; exit 1 ; } ( cd $WORKTREE_NAME && sh "$CURDIR"/ci/txpush.sh --no-tx ) > /dev/null 2>&1 || { echo "! Could not re-create translations." ; exit 1 ; } # Remove linenumbers from .ts (XML) and .pot sed -i'' -e '/ === # # 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. # ### END LICENSE ### USAGE # # Fetch the Transifex translations for Calamares and incorporate them # into the source tree, adding commits of the different files. # # Run this (occasionally) at the top-level directory to get # new translations. See also CMakeLists.txt and ci/txstats.py # for update instructions. # ### END USAGE ### SANITY CHECKING # # 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) # 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 ; } ### FIND EXECUTABLES # # XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # XMLLINT is optional ### FETCH TRANSLATIONS # # Use Transifex client to get translations; this depends on the # .tx/config file to locate files, and overwrites them in the # filesystem with new (merged) translations. export QT_SELECT=5 tx pull --force --source --all ### CLEANUP TRANSLATIONS # # Some languages have been deprecated. They may still exist in Transifex, # so clean them up after pulling. # drop_language() { 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 mv calamares.desktop.new calamares.desktop # And fixup the XML files like in txpush.sh if test -n "$XMLLINT" ; then for TS_FILE in lang/calamares_*.ts do $XMLLINT --c14n11 "$TS_FILE" | { echo "" ; cat - ; } | $XMLLINT --format --encode utf-8 -o "$TS_FILE".new - && mv "$TS_FILE".new "$TS_FILE" done fi ### COMMIT TRANSLATIONS # # Produce multiple commits (for the various parts of the i18n # infrastructure used by Calamares) of the updated translations. # Try to be a little smart about not committing trivial changes. # Who is credited with these CI commits AUTHOR="--author='Calamares CI '" # Message to put after the module name BOILERPLATE="Automatic merge of Transifex translations" git add --verbose lang/calamares*.ts git commit "$AUTHOR" --message="i18n: [calamares] $BOILERPLATE" | true rm -f lang/desktop*.desktop awk ' BEGIN {skip=0;} /^# Translations/ {skip=1;} {if (!skip || (length($0)>1 && $0 != "# Translations")) { skip=0; print $0; }}' < calamares.desktop > calamares.desktop.new mv calamares.desktop.new calamares.desktop git add --verbose calamares.desktop git commit "$AUTHOR" --message="i18n: [desktop] $BOILERPLATE" | true # Transifex updates the PO-Created timestamp also when nothing interesting # has happened, so drop the files which have just 1 line changed (the # 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 -- # 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 FILES=$(find "$MODULE_DIR" -name "*.py" -a -type f) if test -n "$FILES" ; then MODULE_NAME=$(basename ${MODULE_DIR}) 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 done git add --verbose ${MODULE_DIR}/lang/* git commit "$AUTHOR" --message="i18n: [${MODULE_NAME}] $BOILERPLATE" | true fi fi 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 done git add --verbose lang/python* git commit "$AUTHOR" --message="i18n: [python] $BOILERPLATE" | true calamares-3.2.41.1/ci/txpush.sh000077500000000000000000000115371410275732300161700ustar00rootroot00000000000000#!/bin/sh ### LICENSE # === This file is part of Calamares - === # # 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. # ### END LICENSE ### USAGE # # Extract translations from Calamares source and send them # to Transifex. Also (forcibly) updates the git "translation" # tag to document that source texts were updated and sent; # this is used by txcheck.sh to ensure that there's enough # time between updates and releases, and that strings don't # change between updates and releases. # # Run this at the top-level. # # Use the --no-tx option to do the extraction, but not the # pushing-to-Transifex part. This can be useful to check for # new strings or when testing the tools themselves. # ### END USAGE ### SANITY CHECKING # # 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) # 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 ; } if test "x$1" = "x--no-tx" ; then # tx is the transifex command -- eat its arguments and do nothing tx() { echo "Skipped tx $*" } # txtag is used to tag in git to measure changes -- skip it too txtag() { echo "Skipped tx tagging." } else # tx is the regular transifex command # txtag is used to tag in git to measure changes txtag() { git tag -f translation git push --force origin translation } fi ### FIND EXECUTABLES # # LUPDATE="" for _lupdate in lupdate-qt5 lupdate do export QT_SELECT=5 $_lupdate -version > /dev/null 2>&1 || export QT_SELECT=qt5 $_lupdate -version > /dev/null 2>&1 && LUPDATE=$_lupdate test -n "$LUPDATE" && break done test -n "$LUPDATE" || { echo "! No working lupdate" ; lupdate -version ; exit 1 ; } XMLLINT="" for _xmllint in xmllint do $_xmllint --version > /dev/null 2>&1 && XMLLINT=$_xmllint test -n "$XMLLINT" && break done # XMLLINT is optional ### CREATE TRANSLATIONS # # Use local tools (depending on type of source) to create translation # sources, then push to Transifex # Don't pull branding translations in, # those are done separately. _srcdirs="src/calamares src/libcalamares src/libcalamaresui src/modules src/qml" $LUPDATE -no-obsolete $_srcdirs -ts lang/calamares_en.ts # 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 tx push --source --no-interactive -r calamares.fdo ### PYTHON MODULES # # The Python tooling depends on the underlying distro to provide # gettext, and handles two cases: # # - python modules with their own lang/ subdir, for larger translations # - python modules without lang/, which use one shared catalog # PYGETTEXT="xgettext --keyword=_n:1,2 -L python" SHARED_PYTHON="" for MODULE_DIR in $(find src/modules -maxdepth 1 -mindepth 1 -type d) ; do FILES=$(find "$MODULE_DIR" -name "*.py" -a -type f) if test -n "$FILES" ; then MODULE_NAME=$(basename ${MODULE_DIR}) if [ -d ${MODULE_DIR}/lang ]; then ${PYGETTEXT} -p ${MODULE_DIR}/lang -d ${MODULE_NAME} -o ${MODULE_NAME}.pot ${MODULE_DIR}/*.py POTFILE="${MODULE_DIR}/lang/${MODULE_NAME}.pot" if [ -f "$POTFILE" ]; then sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' "$POTFILE" tx set -r calamares.${MODULE_NAME} --source -l en "$POTFILE" tx push --source --no-interactive -r calamares.${MODULE_NAME} fi else SHARED_PYTHON="$SHARED_PYTHON $FILES" fi fi done if test -n "$SHARED_PYTHON" ; then ${PYGETTEXT} -p lang -d python -o python.pot $SHARED_PYTHON POTFILE="lang/python.pot" sed -i'' '/^"Content-Type/s/CHARSET/UTF-8/' "$POTFILE" tx set -r calamares.python --source -l en "$POTFILE" tx push --source --no-interactive -r calamares.python fi txtag exit 0 calamares-3.2.41.1/ci/txreduce.py000066400000000000000000000027411410275732300164700ustar00rootroot00000000000000#! /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) calamares-3.2.41.1/ci/txstats.py000077500000000000000000000171771410275732300163730ustar00rootroot00000000000000#! /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. # # This is a Python3 script. # # Run it with a -v command-line option to get extra output on # actual translation percentages. import sys import argparse class TXError(Exception): pass class TransifexGetter(object): """ 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. """ def __init__(self): token = self.get_tx_credentials() if token is None: raise TXError("Could not get Transifex API token") 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") 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. Prints a CMake set() command with the @p label as part of the variable name. Performs line-wrapping. """ these_langs = [l for s, l in all_langs if filterfunc(s)] out = " ".join(["set( _tx_%s" % label, " ".join(sorted(these_langs)), ")"]) width = 68 prefix = "" while len(out) > width - len(prefix): chunk = out[:out[:width].rfind(" ")] outputter.print("%s%s" % (prefix, chunk)) out = out[len(chunk)+1:] prefix = " " outputter.print("%s%s" % (prefix, out)) 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 out CMake settings to replace the _tx_* variables in CMakeLists.txt according to standard criteria. If @p verbose is True, prints out language stats as well. """ 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. # # Note that Esperanto (eo) is special-cased in CMakeLists.txt # during the build; recent Qt releases *do* support the language, # 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 = [] 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) # at the bottom but you can still determine the "actual" percentage. if lang_name in incomplete_languages: stats = -stats all_langs.append((stats, lang_name)) if verbose: for s, l in sorted(all_langs, reverse=True): 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) return 0 def main(): 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__": sys.exit(main()) calamares-3.2.41.1/cmake_uninstall.cmake.in000066400000000000000000000020231410275732300204510ustar00rootroot00000000000000# 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") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) calamares-3.2.41.1/com.github.calamares.calamares.policy000066400000000000000000000016511410275732300230350ustar00rootroot00000000000000 Calamares https://github.com/calamares Run Installer Authentication is required to run the installation program drive-harddisk no no auth_admin /usr/bin/calamares true calamares-3.2.41.1/data/000077500000000000000000000000001410275732300146055ustar00rootroot00000000000000calamares-3.2.41.1/data/FreeBSD/000077500000000000000000000000001410275732300160175ustar00rootroot00000000000000calamares-3.2.41.1/data/FreeBSD/Makefile000066400000000000000000000020241410275732300174550ustar00rootroot00000000000000# $FreeBSD$ # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause PORTNAME= calamares DISTVERSION= 3.2.25 CATEGORIES= sysutils MASTER_SITES= https://github.com/${PORTNAME}/${PORTNAME}/releases/download/v${DISTVERSION}/ MAINTAINER= adridg@FreeBSD.org COMMENT= GUI System installer and OEM configurator LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE LIB_DEPENDS= libyaml-cpp.so:devel/yaml-cpp \ libpwquality.so:security/libpwquality \ libboost_python${PYTHON_SUFFIX}.so:devel/boost-python-libs USES= cmake compiler:c++17-lang gettext kde:5 pkgconfig \ python:3.3+ qt:5 USE_QT= concurrent core dbus declarative gui \ network quickcontrols2 svg widgets xml \ buildtools_build linguist_build qmake_build USE_KDE= coreaddons dbusaddons parts service \ ecm_build USE_LDCONFIG= yes CMAKE_OFF= WITH_KF5Crash \ INSTALL_CONFIG \ INSTALL_COMPLETION \ INSTALL_POLKIT CMAKE_ON= CMAKE_DISABLE_FIND_PACKAGE_KPMcore CMAKE_ARGS= -DSKIP_MODULES="webview" .include calamares-3.2.41.1/data/FreeBSD/distinfo000066400000000000000000000002441410275732300175610ustar00rootroot00000000000000TIMESTAMP = 1592339404 SHA256 (calamares-3.2.25.tar.gz) = 797ce33db7d4e4c06bbccef95f6c4023f7628e91bd142896695565fed4ae8c4b SIZE (calamares-3.2.25.tar.gz) = 3580197 calamares-3.2.41.1/data/FreeBSD/pkg-descr000066400000000000000000000010041410275732300176140ustar00rootroot00000000000000Calamares is an installer framework. By design it is very customizable, in order to satisfy a wide variety of needs and use cases. Calamares aims to be easy, usable, beautiful, pragmatic, inclusive and distribution-agnostic. Got a Linux distribution but no system installer? Grab Calamares, mix and match any number of Calamares modules (or write your own in Python or C++), throw together some branding, package it up and you are ready to ship! (The above applies to FreeBSD as well) WWW: https://calamares.io/ calamares-3.2.41.1/data/FreeBSD/pkg-plist000066400000000000000000000243641410275732300176650ustar00rootroot00000000000000bin/calamares include/libcalamares/CalamaresConfig.h include/libcalamares/CppJob.h include/libcalamares/DllMacro.h include/libcalamares/GlobalStorage.h include/libcalamares/Job.h include/libcalamares/JobExample.h include/libcalamares/JobQueue.h include/libcalamares/ProcessJob.h include/libcalamares/PythonHelper.h include/libcalamares/PythonJob.h include/libcalamares/PythonJobApi.h include/libcalamares/Settings.h include/libcalamares/utils/BoostPython.h include/libcalamares/utils/CalamaresUtilsSystem.h include/libcalamares/utils/CommandList.h include/libcalamares/utils/Dirs.h include/libcalamares/utils/Entropy.h include/libcalamares/utils/Logger.h include/libcalamares/utils/NamedEnum.h include/libcalamares/utils/NamedSuffix.h include/libcalamares/utils/PluginFactory.h include/libcalamares/utils/RAII.h include/libcalamares/utils/Retranslator.h include/libcalamares/utils/String.h include/libcalamares/utils/Tests.h include/libcalamares/utils/UMask.h include/libcalamares/utils/Units.h include/libcalamares/utils/Variant.h include/libcalamares/utils/Yaml.h include/libcalamares/utils/moc-warnings.h lib/calamares/libcalamares.so lib/calamares/modules/bootloader/main.py lib/calamares/modules/bootloader/module.desc lib/calamares/modules/bootloader/test.yaml lib/calamares/modules/contextualprocess/libcalamares_job_contextualprocess.so lib/calamares/modules/contextualprocess/module.desc lib/calamares/modules/displaymanager/main.py lib/calamares/modules/displaymanager/module.desc lib/calamares/modules/dracut/main.py lib/calamares/modules/dracut/module.desc lib/calamares/modules/dracutlukscfg/libcalamares_job_dracutlukscfg.so lib/calamares/modules/dracutlukscfg/module.desc lib/calamares/modules/dummycpp/libcalamares_job_dummycpp.so lib/calamares/modules/dummycpp/module.desc lib/calamares/modules/dummyprocess/module.desc lib/calamares/modules/dummypython/main.py lib/calamares/modules/dummypython/module.desc lib/calamares/modules/finished/libcalamares_viewmodule_finished.so lib/calamares/modules/finished/module.desc lib/calamares/modules/fstab/main.py lib/calamares/modules/fstab/module.desc lib/calamares/modules/fstab/test.yaml lib/calamares/modules/grubcfg/main.py lib/calamares/modules/grubcfg/module.desc lib/calamares/modules/hostinfo/libcalamares_job_hostinfo.so lib/calamares/modules/hostinfo/module.desc lib/calamares/modules/hwclock/main.py lib/calamares/modules/hwclock/module.desc lib/calamares/modules/initcpio/libcalamares_job_initcpio.so lib/calamares/modules/initcpio/module.desc lib/calamares/modules/initcpiocfg/main.py lib/calamares/modules/initcpiocfg/module.desc lib/calamares/modules/initramfs/libcalamares_job_initramfs.so lib/calamares/modules/initramfs/module.desc lib/calamares/modules/initramfscfg/encrypt_hook lib/calamares/modules/initramfscfg/encrypt_hook_nokey lib/calamares/modules/initramfscfg/main.py lib/calamares/modules/initramfscfg/module.desc lib/calamares/modules/interactiveterminal/libcalamares_viewmodule_interactiveterminal.so lib/calamares/modules/interactiveterminal/module.desc lib/calamares/modules/keyboard/libcalamares_viewmodule_keyboard.so lib/calamares/modules/keyboard/module.desc lib/calamares/modules/keyboardq/libcalamares_viewmodule_keyboardq.so lib/calamares/modules/keyboardq/module.desc lib/calamares/modules/license/libcalamares_viewmodule_license.so lib/calamares/modules/license/module.desc lib/calamares/modules/locale/libcalamares_viewmodule_locale.so lib/calamares/modules/locale/module.desc lib/calamares/modules/localecfg/main.py lib/calamares/modules/localecfg/module.desc lib/calamares/modules/localeq/libcalamares_viewmodule_localeq.so lib/calamares/modules/localeq/module.desc lib/calamares/modules/luksbootkeyfile/libcalamares_job_luksbootkeyfile.so lib/calamares/modules/luksbootkeyfile/module.desc lib/calamares/modules/luksopenswaphookcfg/main.py lib/calamares/modules/luksopenswaphookcfg/module.desc lib/calamares/modules/machineid/libcalamares_job_machineid.so lib/calamares/modules/machineid/module.desc lib/calamares/modules/mount/main.py lib/calamares/modules/mount/module.desc lib/calamares/modules/mount/test.yaml lib/calamares/modules/netinstall/libcalamares_viewmodule_netinstall.so lib/calamares/modules/netinstall/module.desc lib/calamares/modules/networkcfg/main.py lib/calamares/modules/networkcfg/module.desc lib/calamares/modules/notesqml/libcalamares_viewmodule_notesqml.so lib/calamares/modules/notesqml/module.desc lib/calamares/modules/oemid/libcalamares_viewmodule_oemid.so lib/calamares/modules/oemid/module.desc lib/calamares/modules/openrcdmcryptcfg/main.py lib/calamares/modules/openrcdmcryptcfg/module.desc lib/calamares/modules/packagechooser/libcalamares_viewmodule_packagechooser.so lib/calamares/modules/packagechooser/module.desc lib/calamares/modules/packages/main.py lib/calamares/modules/packages/module.desc lib/calamares/modules/packages/test.yaml lib/calamares/modules/plymouthcfg/main.py lib/calamares/modules/plymouthcfg/module.desc lib/calamares/modules/preservefiles/libcalamares_job_preservefiles.so lib/calamares/modules/preservefiles/module.desc lib/calamares/modules/rawfs/main.py lib/calamares/modules/rawfs/module.desc lib/calamares/modules/removeuser/libcalamares_job_removeuser.so lib/calamares/modules/removeuser/module.desc lib/calamares/modules/services-openrc/main.py lib/calamares/modules/services-openrc/module.desc lib/calamares/modules/services-systemd/main.py lib/calamares/modules/services-systemd/module.desc lib/calamares/modules/shellprocess/libcalamares_job_shellprocess.so lib/calamares/modules/shellprocess/module.desc lib/calamares/modules/summary/libcalamares_viewmodule_summary.so lib/calamares/modules/summary/module.desc lib/calamares/modules/tracking/libcalamares_viewmodule_tracking.so lib/calamares/modules/tracking/module.desc lib/calamares/modules/umount/main.py lib/calamares/modules/umount/module.desc lib/calamares/modules/unpackfs/main.py lib/calamares/modules/unpackfs/module.desc lib/calamares/modules/unpackfs/runtests.sh lib/calamares/modules/users/libcalamares_viewmodule_users.so lib/calamares/modules/users/module.desc lib/calamares/modules/welcome/libcalamares_viewmodule_welcome.so lib/calamares/modules/welcome/module.desc lib/calamares/modules/welcomeq/libcalamares_viewmodule_welcomeq.so lib/calamares/modules/welcomeq/module.desc lib/cmake/Calamares/CMakeColors.cmake lib/cmake/Calamares/CalamaresAddBrandingSubdirectory.cmake lib/cmake/Calamares/CalamaresAddLibrary.cmake lib/cmake/Calamares/CalamaresAddModuleSubdirectory.cmake lib/cmake/Calamares/CalamaresAddPlugin.cmake lib/cmake/Calamares/CalamaresAddTest.cmake lib/cmake/Calamares/CalamaresAddTranslations.cmake lib/cmake/Calamares/CalamaresAutomoc.cmake lib/cmake/Calamares/CalamaresConfig.cmake lib/cmake/Calamares/CalamaresConfigVersion.cmake lib/cmake/Calamares/CalamaresLibraryDepends-%%CMAKE_BUILD_TYPE%%.cmake lib/cmake/Calamares/CalamaresLibraryDepends.cmake lib/cmake/Calamares/CalamaresUse.cmake lib/libcalamares.so lib/libcalamares.so.3.2.25 lib/libcalamaresui.so lib/libcalamaresui.so.3.2.25 man/man8/calamares.8.gz share/applications/calamares.desktop %%DATADIR%%/branding/default/banner.png %%DATADIR%%/branding/default/branding.desc %%DATADIR%%/branding/default/lang/calamares-default_ar.qm %%DATADIR%%/branding/default/lang/calamares-default_en.qm %%DATADIR%%/branding/default/lang/calamares-default_eo.qm %%DATADIR%%/branding/default/lang/calamares-default_fr.qm %%DATADIR%%/branding/default/lang/calamares-default_nl.qm %%DATADIR%%/branding/default/languages.png %%DATADIR%%/branding/default/show.qml %%DATADIR%%/branding/default/squid.png %%DATADIR%%/branding/default/stylesheet.qss %%DATADIR%%/qml/calamares/slideshow/BackButton.qml %%DATADIR%%/qml/calamares/slideshow/ForwardButton.qml %%DATADIR%%/qml/calamares/slideshow/NavButton.qml %%DATADIR%%/qml/calamares/slideshow/Presentation.qml %%DATADIR%%/qml/calamares/slideshow/Slide.qml %%DATADIR%%/qml/calamares/slideshow/SlideCounter.qml %%DATADIR%%/qml/calamares/slideshow/qmldir share/icons/hicolor/scalable/apps/calamares.svg share/locale/ar/LC_MESSAGES/calamares-python.mo share/locale/as/LC_MESSAGES/calamares-python.mo share/locale/ast/LC_MESSAGES/calamares-python.mo share/locale/be/LC_MESSAGES/calamares-python.mo share/locale/bg/LC_MESSAGES/calamares-python.mo share/locale/ca/LC_MESSAGES/calamares-python.mo share/locale/cs_CZ/LC_MESSAGES/calamares-python.mo share/locale/da/LC_MESSAGES/calamares-python.mo share/locale/de/LC_MESSAGES/calamares-python.mo share/locale/el/LC_MESSAGES/calamares-python.mo share/locale/en_GB/LC_MESSAGES/calamares-python.mo share/locale/eo/LC_MESSAGES/calamares-python.mo share/locale/es/LC_MESSAGES/calamares-python.mo share/locale/es_MX/LC_MESSAGES/calamares-python.mo share/locale/es_PR/LC_MESSAGES/calamares-python.mo share/locale/et/LC_MESSAGES/calamares-python.mo share/locale/eu/LC_MESSAGES/calamares-python.mo share/locale/fi_FI/LC_MESSAGES/calamares-python.mo share/locale/fr/LC_MESSAGES/calamares-python.mo share/locale/gl/LC_MESSAGES/calamares-python.mo share/locale/he/LC_MESSAGES/calamares-python.mo share/locale/hi/LC_MESSAGES/calamares-python.mo share/locale/hr/LC_MESSAGES/calamares-python.mo share/locale/hu/LC_MESSAGES/calamares-python.mo share/locale/id/LC_MESSAGES/calamares-python.mo share/locale/is/LC_MESSAGES/calamares-python.mo share/locale/it_IT/LC_MESSAGES/calamares-python.mo share/locale/ja/LC_MESSAGES/calamares-python.mo share/locale/ko/LC_MESSAGES/calamares-python.mo share/locale/lt/LC_MESSAGES/calamares-python.mo share/locale/ml/LC_MESSAGES/calamares-python.mo share/locale/mr/LC_MESSAGES/calamares-python.mo share/locale/nb/LC_MESSAGES/calamares-python.mo share/locale/nl/LC_MESSAGES/calamares-python.mo share/locale/pl/LC_MESSAGES/calamares-python.mo share/locale/pt_BR/LC_MESSAGES/calamares-python.mo share/locale/pt_PT/LC_MESSAGES/calamares-python.mo share/locale/ro/LC_MESSAGES/calamares-python.mo share/locale/ru/LC_MESSAGES/calamares-python.mo share/locale/sk/LC_MESSAGES/calamares-python.mo share/locale/sl/LC_MESSAGES/calamares-python.mo share/locale/sq/LC_MESSAGES/calamares-python.mo share/locale/sr/LC_MESSAGES/calamares-python.mo share/locale/sr@latin/LC_MESSAGES/calamares-python.mo share/locale/sv/LC_MESSAGES/calamares-python.mo share/locale/th/LC_MESSAGES/calamares-python.mo share/locale/tr_TR/LC_MESSAGES/calamares-python.mo share/locale/uk/LC_MESSAGES/calamares-python.mo share/locale/zh_CN/LC_MESSAGES/calamares-python.mo share/locale/zh_TW/LC_MESSAGES/calamares-python.mo calamares-3.2.41.1/data/completion/000077500000000000000000000000001410275732300167565ustar00rootroot00000000000000calamares-3.2.41.1/data/completion/bash/000077500000000000000000000000001410275732300176735ustar00rootroot00000000000000calamares-3.2.41.1/data/completion/bash/calamares000066400000000000000000000013251410275732300215470ustar00rootroot00000000000000# === 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 calamares-3.2.41.1/data/config-appimage/000077500000000000000000000000001410275732300176335ustar00rootroot00000000000000calamares-3.2.41.1/data/config-appimage/branding/000077500000000000000000000000001410275732300214175ustar00rootroot00000000000000calamares-3.2.41.1/data/config-appimage/branding/default/000077500000000000000000000000001410275732300230435ustar00rootroot00000000000000calamares-3.2.41.1/data/config-appimage/branding/default/squid.png000066400000000000000000000250541410275732300247040ustar00rootroot00000000000000PNG  IHDR\rf pHYsXXm7tEXtSoftwarewww.inkscape.org< IDATxyŝ翑u}HjD .$!F3,mػz[{ywޮ;~0g<#f%ea! .T:3ʪʬ#*߇W**3"**Edd&C s8e چG.Gr A20d`"D! C@  A20d`"D! C@  A20d`"D! C@  A20d`"D! C@  A20d`"(<}zgd׿!qejD27

cs{_E[(P7@C’ UxJw5! ,a&Rd~ k4GW%Jb"% E`&|)ofHု_00ZdJy2_@"aIVy L .t YRJ͸?$J.mۍTKLj=iov)R K#:;;ԄcdddR.#F"-hhCCC===hoo/HpuD"X-[P(666ӧO[ѣGsޗSdZۧR)allL7@ƶ_x1Ѩef9shND[[8z*4ܹsqu .9%Iݻ/2FFF :âEp=Xocǎׯ ҟyڵzWR-[ رcO~_r%ny䑊sk֬ƍ-9{n#]f|뭷h׿Y˲ 6+@GGGgϞE?z-\]\l3 zlڴ T8N BXv-V\;ww9j Rj3χ,˺-Zd K-REˇ1nzXv-n݊K/+3҂{7ݶԧj*<䓦 YKg;͛qךH8w܁:'}&twwC[kWa…5-s[֜LB!|s^w};w.g|o @p%+(ksgg,˘={vu ,_---%Sݍ/|6m*+:kjjn[^ Fyݵk^}U}$)7!vcw"/ow.0Yuf#N#JTUKTLMM'!VZ&^u[͛ֆ~<9͙31<85`w`lv{nXp!/ fϞV[cȑ#E˙7o 4{1b1\|Ÿꪫy###?3L3fO> 6+֬cZq6b5GQ̙38~8/^\Y[[[Q(V'OqIرc?!NKK ̙c1>iXjֱcXIفX1bb4򙞞6MBssرc~wy'|` ԩS%cֱϞ=[FMT_tE%No +Bh4x  1I)k$I.H?tvEo3G7W7:Z^-붶6|K_ƍK6 90rrr /@p |cp4=LYG<NV~:믿^UF8رc{「544೟,."6@"0M/2g:vloo7=\)vJLr;Q~)eєB:ƶm۰s΢/IN Ơo csL]]]{pO9tRKs)07;;QL xҞOԬ|2uY.2V| _@{{;nl߾݌Ĩ ܩ7Ė-[ >ߏ}!cՈD"?d2 nݪ馛 &$IBWWWƝXtgT Ǐjq{n(8|r̸إǓ8s tŸɓ'dSJ$k/ @g\{hkk+l֬Ykr$I]w݅'x4 ̟1ZoS֬Y5k֘~666~<##u8v|@'N("Q$YfƳ7tg/~ {<1ưrJ\Do~sF$vQ֌,˦QPNU;Pl^-ʟ5k勡V>֭z}~2*F*K/TU^7 &9;wlxgvgjZoevo>I /9~ike_JNA&7d~l۶sǖ1p'饫===UŊE_ V s[d0o>>|k֬A__ЀI>}~!J!H˿@ѳŽ}!K3+%E8FVXQMAD|XbVZٳgx8x vMP܅0EYvz_$`1~%ꆧE/%?&b?\ ̼euj`ĭ?,,bXt|;+/R,泐[oGxr搴SC? ?nl2)W}Š?YWy]'F͘8;7QQ%ao#70ymXB֬2j%~P;pCϠy麂rci4 `@@³44@Ր8@9!~ cdUC`3_FF0 TT#~L dB`#knJz>komC3ov[@i@MC&Pd62ϾaK^- +"AGWaK'>~ʆ fv|6ppa'NA}򋏫 12!pWį (2 xM"1&(2 xNp E"l4H S%~A|`2{@(;Uu^koCMZ @ȅ \o Tr _l q> 6\ÁzU `d.ǫ&u ndk& ld+&7 R! n7_Tgdí&w| x@P/ x@Y7/H;(~}PťZVr#XaE-/p@@((rpJ4D. @dAg_Rg40,~H$@. 8E$?s.S._A) ҌoxSw$@`4$ &@C9HʵW  rM_tM L@%ר>22B',Mrf߱XSCHu$~/kmdDT0s\ oV T$i+d)2Z)zE_`>K$4L_~};s>(QaVUHSF}52bF$4|ʭOfGJ@0E ,#ϧgڮW2dF }nN⯨>(<ÊdSdDY& nO⯨>Ei e4bcc}[L #lуH3W.~UQQ#,g[t WQb2!Q5IՃ1+$~+YB@BD<+%4IeCC6"v_]B+ gy6ZrR M"vB( ݶ{Jw qgr#byyUE(v XedL3|AxIVfٹt2R r)NG  j1[C[22fHL;;`ٿIVߝ"Lp&dD͑9$ѷ=vZ  tX[z)uˀHS dD]ɚ$~G! T"I!" &",#$ p%! 3> ӃC/%T#N!Hjf!+KRI.2c~_<8%( `cj *%J!JDnr+-ף( cH%L^?@sGeJ(ddep87eb2cH@;gMn?(Tu aRĠI(#cATT g&tX~?(5A8cHR¾t˧*D(Hz$%kGm^sFԔ ,``%Y7Ƙ­ҋ]f^QOh@1ȏW`Jp4 |$@!y%!?5k {ȟ-"|,te""HtnZxo>/'kP@R" 4@IPj}v @c|,$!ѿ |J1hR--Le8h@pB~ $b"__, #|AC3Fh!A O|JsW ~c@b HŁvh_] : |vM`01 Lnw.zK]\M!J8G8}1==EQGֆ̝7 z{`[+ށ;`^p@-Ƥ5woS`S`{{1̡vk|=@ա Q؃D"/y?$.\\ޅ}؇=UfĀKozM쩜_*[{`\uYE>@ ϼCkGo:XfwM`6ծ4jgiF[eo^e('8^gl8^{eg1+q՛z Ͱww>؃`+"n[+ɟ!]hkx嗱蜅[o---!pa~Y'$] sH{)wȯf޸Ưs4wԌOmcwt8ZOmJMûPxkcv|yh}Gzrs5?LNNߟځ;Z9 q${+RU״z@/隖9я>D,ib71ݚH&p),s,ڒ'^s8ϑJDG:Ǒ媗Bb%LQh}!:qЙ7>¡sVnA%MPÍjN1"iE:WkG7GDƴN*% @yg{UyEg.;2ږ*1 MM3D"m?{L_Xo]vO_| 6{ÔJ9w/+upk|LJϠ=szzuÁp8ջf,^|' Sx-5ԈK>uLϿ<ڬhL=\MǠU{cW^Ztc 1'q_r[Y&et×n N1 IVO1/T3opf12/1;9~_Qa 0?RnhG"U1\uWV_cs֭Pvͣ,_s&dn+c=+1򏊇"LeB\6 IDAT ~a>y6W-5dׅ ^i&m 3DY{vwJtuwץlEQO:x[pPg-A|L 9KC7wэ_ůw o8wٽS* c f477׸\kC[[ce}r*sBHP#-8}n:/_,/H/iᣎpD 3 剿prX\\`: 0o|x&5+7B'!CN_WS-=8sBcEGMק.~QE7M@>XbV-4?ۖՈ_o;ͷȲ;vDQ,X8O.ʍWb> 7nH,^͹g6O[O&!t&bI4yp`58.~tkhhhe0x,&'9#f,^`]V*Cg{ɖ1K8v@^G Cl[+ߛgAgKM>V? 10,Bp < =;~q?ҐrHG0OnX`t TU "~΃O!:~E$[ܪ1qR7M&SSS?t Eлp.] ڿSdCP*BCh= M'w#:xRIӍ0ݳ S/k%w>!s FtZgCt0W%z1=o &_x%F47n6ҩ}tgNԔ嶊,%T F+oi8 !OBN HGڐndmI"FcW ls`:EBOA2=<ԀTSm 3`iZf<+~| ~3&&&0=5xtn!ܱ` ƀΎaӱ~ <#l{2 U+pȊNgv*$0Ț όhP"~Cjy!lPa--Դ>r~ C/m?71@N;W (v0Yǣ@p FzE~cH쳰ߊf446GahQ?7)g)w u= `(hmmx&mvYjmlX˲g;Ol465L)C[ȝC17B i! Eڂq g秳3s0[9:e^9o ` MOgۡZ qNG~ֺ i}q@>!YAsK+&&9 .jc~43m11;gfD۔2,8`y݆+FEAcs3&''a!g_S_h1LǦs(& B| +# bya\S\=0 1=5B|}jP_vx vB0x GE"Q-D3` b a1EQHHQΑL&-!m.SC#,#h g~)a !Ldg`fx:kQΏ׻U*T杘74=vJ:P f8 jgw$>"D! C@ï;uOIENDB`calamares-3.2.41.1/data/config-appimage/branding/default/squid.png.license000066400000000000000000000001421410275732300263140ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/config-appimage/modules/000077500000000000000000000000001410275732300213035ustar00rootroot00000000000000calamares-3.2.41.1/data/config-appimage/modules/displaymanager.conf000066400000000000000000000021331410275732300251510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. --- #The DM module attempts to set up all the DMs found in this list, in that precise order. #It also sets up autologin, if the feature is enabled in globalstorage. #The displaymanagers list can also be set in globalstorage, and in that case it overrides anything set up here. displaymanagers: - slim - sddm - lightdm - gdm - mdm - lxdm - kdm #Enable the following settings to force a desktop environment in your displaymanager configuration file: #defaultDesktopEnvironment: # executable: "startkde" # desktopFile: "plasma" #If true, try to ensure that the user, group, /var directory etc. for the #display manager are set up correctly. This is normally done by the distribution #packages, and best left to them. Therefore, it is disabled by default. basicSetup: false #If true, setup autologin for openSUSE. This only makes sense on openSUSE #derivatives or other systems where /etc/sysconfig/displaymanager exists. sysconfigSetup: false calamares-3.2.41.1/data/config-appimage/modules/finished.conf000066400000000000000000000026651410275732300237540ustar00rootroot00000000000000# 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). --- # Behavior of the "restart system now" button. # # There are four usable values: # - never # Does not show the button and does not restart. # This matches the old behavior with restartNowEnabled=false. # - user-unchecked # Shows the button, defaults to unchecked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=false. # - user-checked # Shows the button, defaults to checked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=true. # - always # Shows the button, checked, but the user cannot change it. # This is new behavior. # # The three combinations of legacy values are still supported. restartNowMode: user-unchecked # If the checkbox is shown, and the checkbox is checked, then when # Calamares exits from the finished-page it will run this command. # If not set, falls back to "shutdown -r now". restartNowCommand: "systemctl -i reboot" # When the last page is (successfully) reached, send a DBus notification # to the desktop that the installation is done. This works only if the # user as whom Calamares is run, can reach the regular desktop session bus. notifyOnFinished: false calamares-3.2.41.1/data/config-appimage/modules/keyboard.conf000066400000000000000000000014231410275732300237520ustar00rootroot00000000000000# 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. --- # The name of the file to write X11 keyboard settings to # The default value is the name used by upstream systemd-localed. # 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 # 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 # found on Debian-related systems. # Defaults to true if nothing is set. #writeEtcDefaultKeyboard: true calamares-3.2.41.1/data/config-appimage/modules/locale.conf000066400000000000000000000020721410275732300234120ustar00rootroot00000000000000# 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 # provided by the 'tzdata' package of your Distribution. # # Distributions using systemd can list available # time zones by using the timedatectl command. # timedatectl list-timezones # # The starting timezone (e.g. the pin-on-the-map) when entering # the locale page can be set through keys *region* and *zone*. # If either is not set, defaults to America/New_York. # region: "Europe" zone: "Amsterdam" # Enable only when your Distribution is using an # custom path for locale.gen #localeGenPath: "PATH_TO/locale.gen" # GeoIP based Language settings: # # GeoIP need an working Internet connection. # geoipUrl: "https://geoip.kde.org/v1/calamares" # GeoIP style. Leave commented out for the "legacy" interpretation. # This setting only makes sense if geoipUrl is set, enabliing geoIP. geoipStyle: "json" calamares-3.2.41.1/data/config-appimage/modules/users.conf000066400000000000000000000043531410275732300233200ustar00rootroot00000000000000# 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. # # - hostname # - username # - password (obscured) # - autologinUser (if enabled, set to username) # # These globalconfig keys are set when the jobs for this module # are created. --- # Used as default groups for the created user. # Adjust to your Distribution defaults. defaultGroups: - users - lp - video - network - storage - wheel - audio # Some Distributions require a 'autologin' group for the user. # Autologin causes a user to become automatically logged in to # the desktop environment on boot. # Disable when your Distribution does not require such a group. autologinGroup: autologin # You can control the initial state for the 'autologin checkbox' in UsersViewStep here. # Possible values are: true to enable or false to disable the checkbox by default doAutologin: true # When set to a non-empty string, Calamares creates a sudoers file for the user. # /etc/sudoers.d/10-installer # Remember to add sudoersGroup to defaultGroups. # # If your Distribution already sets up a group of sudoers in its packaging, # remove this setting (delete or comment out the line below). Otherwise, # the setting will be duplicated in the /etc/sudoers.d/10-installer file, # potentially confusing users. sudoersGroup: wheel # Setting this to false , causes the root account to be disabled. setRootPassword: true # You can control the initial state for the 'root password checkbox' in UsersViewStep here. # Possible values are: true to enable or false to disable the checkbox by default. # When enabled the user password is used for the root account too. # NOTE: doReusePassword requires setRootPassword to be enabled. doReusePassword: true # These are optional password-requirements that a distro can enforce # on the user. The values given in this sample file disable each check, # as if the check was not listed at all. passwordRequirements: minLength: -1 # Password at least this many characters maxLength: -1 # Password at most this many characters userShell: /bin/bash calamares-3.2.41.1/data/config-appimage/modules/welcome.conf000066400000000000000000000034011410275732300236030ustar00rootroot00000000000000# 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 # the show* variables. # # In addition to displaying the welcome page, this module # can check requirements for installation. --- # Display settings for various buttons on the welcome page. showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true # Requirements checking. These are general, generic, things # that are checked. They may not match with the actual requirements # imposed by other modules in the system. 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. requiredStorage: 5.5 # Amount of available RAM, in GiB. Floating-point is allowed here. requiredRam: 1.0 # 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 # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to # the host system satisfying the condition. # # This sample file lists all the conditions that are known. check: - ram - power - internet - root - screen # List conditions that **must** be satisfied (from the list # of conditions, above) for installation to proceed. # If any of these conditions are not met, the user cannot # continue past the welcome page. required: - ram calamares-3.2.41.1/data/config-appimage/settings.conf000066400000000000000000000013321410275732300223410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration file for Calamares # Syntax is YAML 1.2 --- modules-search: [ usr/lib/calamares/modules ] # YAML: list of maps of string:string key-value pairs. #instances: #- id: owncloud # module: webview # config: owncloud.conf # Sequence section. This section describes the sequence of modules, both # viewmodules and jobmodules, as they should appear and/or run. sequence: - show: - welcome - locale - keyboard - users - summary - exec: - dummypython - locale - keyboard - users - displaymanager - networkcfg - show: - finished branding: default prompt-install: false # OEM mode dont-chroot: true disable-cancel: false calamares-3.2.41.1/data/example-root/000077500000000000000000000000001410275732300172215ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/README.md000066400000000000000000000007601410275732300205030ustar00rootroot00000000000000# 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 bits that need to be on the target system for example purposes. It should *not* have a bin/, lib/, sbin/ or lib64/ directory, since those are copied into the example-distro filesystem from the build host. calamares-3.2.41.1/data/example-root/etc/000077500000000000000000000000001410275732300177745ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/etc/bash.bashrc000066400000000000000000000002001410275732300220650ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-3.2.41.1/data/example-root/etc/group000066400000000000000000000001201410275732300210440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # root:x:0: calamares-3.2.41.1/data/example-root/etc/issue000066400000000000000000000001521410275732300210450ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # This is an example /etc/issue file. calamares-3.2.41.1/data/example-root/etc/locale.gen000066400000000000000000000005651410275732300217340ustar00rootroot00000000000000# 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. en_CA.UTF-8 UTF-8 en_US.UTF-8 UTF-8 calamares-3.2.41.1/data/example-root/etc/profile000066400000000000000000000002001410275732300213470ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Global .profile -- add /sbin_1 PATH=$PATH:/sbin_1:/xbin calamares-3.2.41.1/data/example-root/etc/sudoers.d/000077500000000000000000000000001410275732300217025ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/etc/sudoers.d/10-installer000066400000000000000000000000001410275732300240260ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/000077500000000000000000000000001410275732300200325ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/share/000077500000000000000000000000001410275732300211345ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/share/zoneinfo/000077500000000000000000000000001410275732300227635ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/share/zoneinfo/.dummy000066400000000000000000000000001410275732300241050ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/share/zoneinfo/America/000077500000000000000000000000001410275732300243245ustar00rootroot00000000000000calamares-3.2.41.1/data/example-root/usr/share/zoneinfo/America/New_York000066400000000000000000000067311410275732300260130ustar00rootroot00000000000000TZif2p`p`epjp5`S`3އpiRK௳4~-౜QpgJ`|3pG,`\p'`;p`p`ƴ`Ĺ𿏲o„}Ovd_/XM|p:-^pW` @p9`ˈp#p`u@U 5peމpݩ`޾kp߉d`MpiF`~/pI(`^pW.G-7'ֶƵ`p`p`op_y`Oxp?[`/Zp(wp?b@opA`BOpCda`D/vpEDC`EG-_GӊI AIlJ#KpL@`M|kpN"`O\MpP`Qp?b@opA`BOpCda`D/vpEDC`EG-_GӊI AIlJ#KpL@`M|kpN"`O\MpP`Q image/svg+xml calamares-3.2.41.1/data/images/boot-environment.svg.license000066400000000000000000000001421410275732300235160ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/bugs.svg000066400000000000000000000073501410275732300175400ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/bugs.svg.license000066400000000000000000000001421410275732300211510ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/fail.svgz000066400000000000000000000023771410275732300177110ustar00rootroot00000000000000ޑSedit-delete.svgWMo6W%5%+{Qb=n3#ѶI4$:;Էm9uXyy3GcWQ̗5D87K㟟q`R<ȥe1ZDڢK@O[v :fMYlOCXnB8Z͆ݾH+`Y"UiQZFzxٓW,yYZ@t>[Ya@+~[Ƕ2B1ԢAw[Y}5f.ΉxLgHVkXmsV$I4~m#z4N9"EEiyHqp Tjb]jxMW dU.&cyYЎo,4gYĢh]^9sI&Qћmn:j'rcy.oRf`f|lz x' mwھ/ HI@WQnaShTo[C]2^l+\XQGQ7ΈY*5n:U J7"̾1ɒ7:\%vShUrObQec8;c gE593ytQns3 OYɬ9旬YmSsx!7 Q 6. S2*gH6_iuCo6O:;:Bn6GjyZ'sV%"tx LmBlwtUm#ݓUXuSm'T AFadBCdݪQ Q2|+5:{;:ꪏFێɭgB+ޏq>1|׷陼"ſxi,0猫U/?àZ Z-D=QM*Iӷ T*jhYV+C\$)w]+BwE3g*x^j)=a%& \ͰGh̰"9>'>% sv|@Y1m!7C='O}GS? M}+O$calamares-3.2.41.1/data/images/fail.svgz.license000066400000000000000000000001421410275732300213160ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/help-donate.svg000066400000000000000000000012431410275732300207730ustar00rootroot00000000000000 calamares-3.2.41.1/data/images/help-donate.svg.license000066400000000000000000000001701410275732300224120ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/data/images/help.svg000066400000000000000000000177621410275732300175400ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/help.svg.license000066400000000000000000000001421410275732300211410ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/information.svgz000066400000000000000000000021421410275732300213110ustar00rootroot00000000000000ޑShelp-about.svgW[o8~җM h ,<i^碕N a_Lnm7.U|wnu_h[Yzwsz5w~IEkFKQS .cr8CBEZ&n=0^erCZ,;@iKdK^ZIsFx>sm\TeKB"/0 <Ԋ(xM4}ވwTBBX@pش9_wk_O})vfՓ$״ⲡ9@7򻂩 ZbVvYv^ דZFƷD L ^rΞid,1ZW<ò:-n>SمPCWPRs~i,Zہ55 K@Z u蚼=Z/ה$*D $y=$ Ⴉ ]Β |]*/╃?NL`qه0 ;(B꠷i@Iф;(2mLh xHl5@jC+ o2ۈ'Fn0dK|3OPpBfez=b$.ӫFn(>}d 3dLz4C3r`zeTqzxبp?-zYe0g,,9cy eEբ`63 72NzJ;-NܫW~,k#6ViJ>3; .ju6J˹H.Sy2UKk׳^K}C AfjDC #/%.!>b,ȓ/, X W܉v67Z3i6%G50EẳjBڌsv޽p-j艱\h\ calamares-3.2.41.1/data/images/information.svgz.license000066400000000000000000000001421410275732300227300ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/no.svgz000066400000000000000000000020721410275732300174020ustar00rootroot00000000000000Swindow-close.svgWQo8~WҗVG;I dnnO&1M7N$ F{e1󯇲@VBV C%z?Ҵb_x.G?|}9՜zQ9rtz~ d/Gz]BRu</yUHz=<.^y.RV\U6 fGaձ/Fl=cL[n"PrW|~<~>uFLAI+Zr9Wo‹fbPmZ : I&E_Q<MdnbrT<0B-7g| ]% S3>SRDhKPݪyY֌4iɄ>vMΎ/Ն#%DM4!3s%b%3YOtLA̝"p{8sյȁvX6z{7AYhigs uc$䌧ELY3 wl%=R@46,N0AI%tS㶊q2pJRϡd-@XΚg;`rڔ9z19-FNVi}w80L\ϻF3_rMմo!n&u /mygeCq-93%KQyi.B瞇lA۰5oE,/q Ѣ(~$\]P lrEhiX SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-alongside.svg000066400000000000000000000415221410275732300225530ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-alongside.svg.license000066400000000000000000000001421410275732300241650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-disk.svg000066400000000000000000000244631410275732300215450ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-disk.svg.license000066400000000000000000000001421410275732300231520ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-erase-auto.svg000066400000000000000000000325551410275732300226610ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-erase-auto.svg.license000066400000000000000000000001421410275732300242650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-manual.svg000066400000000000000000000316351410275732300220670ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-manual.svg.license000066400000000000000000000001421410275732300234750ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-partition.svg000066400000000000000000000301311410275732300226110ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-partition.svg.license000066400000000000000000000001421410275732300242310ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-replace-os.svg000066400000000000000000000410611410275732300226360ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-replace-os.svg.license000066400000000000000000000001421410275732300242520ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/partition-table.svg000066400000000000000000000131751410275732300217000ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/partition-table.svg.license000066400000000000000000000001421410275732300233070ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/release.svg000066400000000000000000000060011410275732300202100ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/release.svg.license000066400000000000000000000001421410275732300216310ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/squid.png000066400000000000000000000201711410275732300177060ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsXXm7tEXtSoftwarewww.inkscape.org<IDATxy%U}ǿofce`d (}IԲRV*eECXFMRTʊAB2RRj, 00lo7ݵo}Ͻ޿xs{Yix#q["4n>|/(A B@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20Z ghu]}fzрJD2 PX>&']}fq1T*"PdP0Q2`A'H3d7e54BW]%H!tE`R]M.IHt% WXougR]EGM X D/ H>t/ H6t刎p?` $jĒ$,, $b;;`L q"0֠d0,^GAC@xyo|599 L "h#~cQ2h  KwUdaC@'oA&.d;_P+(€ phsxu-K%~FɊ5> dgmSsQcI&-~0f[eZ'(d!RX>6 Qc7jɧl02(lڅwڲ5fl}0Ŀ!7 sleGRL Bi6gPGWiI00/F&뎇0ҖdC0n$ Rmd6ȇL_I20/MdA_Sa.݁JӄD@7@L/@6@H? ~AA&+d>2r%7cgtŠ@os-@o~|ٗF@V z_y}9{7d]C3S|7Uw __{RW 2@ǐ@L )g: bIH,: @nfdKC0I5o1 :@I5O7NUD+d!4p}Pb ;d!4ڇI@ d!$HdD@L *ˏk.BTl"" &݊`A;J DIMUZ$.Sk!"e22 HAFCD#2wSbO{݁ Ą@3Ռ@ dE"an6%bF\LiƳet2V}}5r<ʮ?XۛԁA@LkESUuP{|0E?QT `d1'&t nd i& ld !)&6 tP5:80a$@Z/32WHE>iHL +J\L+&4 j)12 t-)~׊:g%h)p™z[UFOqz/j%Vb2aG$~H_f @JHh_O MW h42m t2&bw$Hr>uA!H)~@'oHh9n^2= 12ӯ !~7"\c,~ALRNc^v<>@h1ƴXt $M"/ cdSHk "( ܊b@X ~?@7g41,~IAAPA@i2/?S^ݎA) /<2_CZ7? qT!Q? 2yHG$#420Ry22&êdXy;@@4Sy*?hM hASќ&m ~>q@ͻB@2`TPaR?.~!}( L}yڞw|Q2-{˧jdĒ( v1ot[#h axGoOgW2c!wM'TN6 (Ǔ{*OejdD0C@L||,T9-ĿDzP9kMGy-hCo )KcBI6^YB@BAj)%4G]C]7 /53+GNjqٶB{)P@NNmʫsGeH )y+( DSiB/"vD2${:,T ( AmT|  BALyR(n_  3g<7 Y} a- E0r(m'lʃ`.V6ݖG^ +dDd0yP| <' 9;S<'{B@Ć bA("eaؑSZH@@Ē%Bs؉ɩEy8yԡuԪVxQ|s Er>X CEhjW'6;w:+Ckk/{KlqK=1V>(fbN r97c&椈  1s CQ7Uze aJ$~Wٹ@=9k€ř6žBu+-"<\mQſƠj ݷ}{?ݦ-1%%TEM1pywW/@t#^B~|+sBQ[MېHM @N^=oDUU'پ ^l޻IOH w~Ga nxd ) 9aH]) |aX/ҷ[ @d 0ŗ@.= 1엡.I@X(Ca u;|݁A]h22 ,I"N~ `q88ثOzl5Z 0 V.|q7Id0pd/kOS @i@~X|`֫uD]1߻t]'p7pqETJEh|q,uaF V^`Wl. Tt07;?DZs)ظi3v^x!6nI#O= >3b[`K  ~@tYFkoV@/ _y ~u V\kk׭tJ`?lw` w|oR~ʏ}|Wnoۙ~/xXWw`a;kC)H>Þ~@0&o<)ʗ|~`j`;o@y> YG W]7߂!aؙSAP{P>񯀒g?6}a-;>90 ?^ \#&&=OӀ'-@#}?4k{<c9ÿE(p̙@ϣvG 9Uh߿l@Bzam2Fz~ B=o^-߁Y[B=oT?L֪8y8ݱ#hKQ~O)R|bcP篁rw W:ǎF_LMNb޽So?.CP+;¨Cy˨Uѕ!ShhI.fg#+Cpn_ HLOM(?Nw{ ? ^OkbKN9t &'0 _ЧG0C8=s&M@Q3m<`3rxcvncH033}?u3ǾY?D]ԣԊ8am y -/_ٱ`}='67ڬj$dri}PpDrX[=yVNR%Ǐ;k`ꈟ b26hL8GZhZf,Ԭ]̎Hcl]7;/ 槁'E"G:npj#ZOx-*T+~PVQ(( e?.roFDKU1/T.M~osr2#c(Λo/j|%c{ Ԭ[|ˋH8*ȹ9mppԪryef}0֞cnDΟ{Se2epsv ˑ t+;Px9Ldյv$~ZFc]( Z<}6`aƖGi娏0_*Zk9R1'eӍ'`ǻ+4Ù Wl|~ bVE0*vv`a 8z4bج[\1]A!&Ø+0CVc5cD#Әp4Z4bƭ|ď8)9W+(wdv}ܮg#!Ua cgjs1j}.֫5^&)rfͩ?Ԯdl[g2"~R)v݁|>su1##زm' Ӡ_i -Fn~lxbx 08p[G!ڏ1ULIyQ|wFUzJ믴5hձ]?aGTQ7m}\sWhhŗ\)?j?cΐ+>JvqKrN8anV}9sGNp~g<ʍ_x'L5(֝]GQ"M uipJ7h742K/"zmb8s~ĐLA;#[X^;>a*v藍)g #+Qy_o]qVϰRg.GREĪի#9i-x@+ >S7 D&ⷿvߋ҆qOOY T1z;122ykそCTƪs B0 8qwP]c6<޽s`/o!(ӯ~.:n;p t'U} n9l\y58'AHӷ~G'0_cp+{OlvhhIP`ϻ8Dc)ۍ7 ^vS߮;fj>;.~Mtz7b>(,^)u!N͞LAmuX(0tr?| ? \tE\ b?R.~ 0p ,:K QpS`z(JlLM oZöW\C34S&Q<7F 4q,{N L.~aDşb10ROFE9W/kL"</:Jc`ظi3v+W KBjk5LNM¨ȕ0#>/B{;i}hJk.BqeX{V9fgP00}c>Sc`0WU7b,n5Z(:BƍW7(jUWc݆ غu;C]a{ Ph8IAUcQ^YfwMDh#~K}UNkӸ)~33(U;sj4< UoDk3%~}-9(~R ~7P*QQ.*\cc@uLMM¨s0ƭ&$`Q{sٹYTJe;ZUN=A|IuGNXr%8`62!hnKĒ\fQH!> "LCj"7I%Ki5+ V` X>19̢T.YmFʭ1p3~8%~>96wo&.iR&wiX|9fffNŝ7EҝRoS58}y";)ݼa5I' `T*Q~_ܭa7C07dԑ}`% Փr3.iR&R-apGV+3ۛM'ҭg$~qgcY8'kȏ5˅ 6ar||;r K)wjZO \SN@zNSr9LL,nPp~6c㤈@ɚ~'/:66AC븳VhON]ӤzMz='w5aٲeӉ4oȨ!jwC)\>0RZ*?nRh@./S\.B0@B}T0`%cW.r4V9-Q\ sLIT@FQU yįyh O w\` &pF&=f9hsg.C_z]^9L0ỉ0z(v0;9hǦ'.AA@ 2 Ad20daok\IENDB`calamares-3.2.41.1/data/images/squid.png.license000066400000000000000000000001421410275732300213230ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/squid.svg000066400000000000000000000260061410275732300177240ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/data/images/squid.svg.license000066400000000000000000000001421410275732300213360ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/data/images/state-error.svg000066400000000000000000000012251410275732300210420ustar00rootroot00000000000000 calamares-3.2.41.1/data/images/state-error.svg.license000066400000000000000000000001701410275732300224610ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/data/images/state-ok.svg000066400000000000000000000011171410275732300203220ustar00rootroot00000000000000 calamares-3.2.41.1/data/images/state-ok.svg.license000066400000000000000000000001701410275732300217410ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/data/images/state-warning.svg000066400000000000000000000016341410275732300213620ustar00rootroot00000000000000 calamares-3.2.41.1/data/images/state-warning.svg.license000066400000000000000000000001701410275732300227750ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/data/images/yes.svgz000066400000000000000000000021621410275732300175660ustar00rootroot00000000000000Sdialog-ok-apply.svgWr8+0%$I9$\33L@$_? Zr"@{PhU#dZWdʗֿBҪu cMq9C{7gdFz8і*w>#Wf? j,[Zz2nbǚ Lvd<[h3߂H9c9깮oB 5o@~G`U_8nW\;صf'a=XDhɛfq{;~/,-k6\= `:j>z\;H0R-dLbi1%cZ6r`||jހַz(& OrA9{!z\$jpE%A]L7tHYAȋ_Pv( Iq^:Aϭ x[ Vo29~l>WF>|kqIU.*e ^ 7'J@3ܗ %D eE} JAr 1.cmM/વ/F>y85U~Zm[Fv{6!.!,J$#J%`itg$:2o'#iA-GogԀ56[d;R;!Mddnjqb{]GjsK?R$y}բ۩#dǪ?P M5r^^Y8׷ek/j:]h8 cS,lT#B@dk5,CRR%™g`s*NAwmޏe0(dw *t'g$p۷//7ZStu5JnR2ߪ$-%ీc3zn~䯩 )5XE{kH|0Ӿh%n|,O<;-ݖ,F@'q40&A3Ʊˌ*$OЀ Q{l:@b\A3,Y+iE86@)VhGVqӆ $WL calamares-3.2.41.1/data/images/yes.svgz.license000066400000000000000000000001421410275732300212030ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/io.calamares.calamares.appdata.xml000066400000000000000000000023611410275732300223160ustar00rootroot00000000000000 io.calamares.calamares.desktop CC0-1.0 GPL-3.0-or-later Calamares Calamares Calamares Calamares

Calamares Linux Installer Calamares Linux Installer Linux Installatieprogramma Calamares

Calamares is an installer program for Linux distributions.

Calamares is een installatieprogramma voor Linux distributies.

https://calamares.io https://https://github.com/calamares/calamares/issues/ https://github.com/calamares/calamares/wiki Calamares Welcome https://calamares.io/images/cal_640.png calamares calamares-3.2.41.1/lang/000077500000000000000000000000001410275732300146155ustar00rootroot00000000000000calamares-3.2.41.1/lang/CMakeLists.txt000066400000000000000000000010001410275732300173440ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # ### 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 ) calamares-3.2.41.1/lang/calamares_ar.ts000066400000000000000000006213111410275732300176030ustar00rootroot00000000000000 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) 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". خطأ Boost.Python في العمل "%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 فشل التثبيت Would you like to paste the install log to the web? 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. أتريد إلغاء عمليّة التّثبيت الحاليّة؟ سيخرج المثبّت وتضيع كلّ التّغييرات. 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'. فشل المثبّت في تحديث جدول التّقسيم على القرص '%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. <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> كلّ البيانات الموجودة في جهاز التّخزين المحدّد. <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 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. 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 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. 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 %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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition أنشئ قسمًا Si&ze: الح&جم: MiB Partition &Type: &نوع القسم: &Primary أ&ساسيّ 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. 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'. 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. 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. 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]) 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 حرّر قسمًا موجودًا Content: المحتوى: &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: Mountpoint already in use. Please select another one. EncryptWidget Form نموذج En&crypt system ع&مِّ النّظام Passphrase عبارة المرور Confirm passphrase أكّد عبارة المرور Please enter the same passphrase in both boxes. 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> 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. <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. يهيّء القسم %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 موصول بالإنترنت 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 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</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. 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. 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>أدخل ذات كلمة المرور مرّتين، للتأكّد من عدم وجود أخطاء طباعيّة. تتكوّن كلمة المرور الجيّدة من خليط أحرف وأرقام وعلامات ترقيم، وطول لا يقلّ عن 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 الجذر 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. 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). <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). 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set راية قسم نظام EFI غير مضبوطة 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. 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 غ.بايت على الأقلّ. <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 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'. 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 متطلّبات النّظام 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 يقسّم 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. اضبط رايات القسم %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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. هذه نظرة عامّة عمّا سيحصل ما إن تبدأ عمليّة التّثبيت. SummaryViewStep Summary الخلاصة 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 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 مرحبا بك 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_as.ts000066400000000000000000007742671410275732300176270ustar00rootroot00000000000000 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> (অগ্ৰাধিকাৰ ভিত্তিত)। এইটো প্ৰক্ৰিযা স্বত: স্ফুৰ্ত ভাবে হ'ব যদিহে আপুনি নিজে মেনুৱেল বিভজন চয়ন নকৰে, য'ত আপুনি নিজে বুত্ লোডাৰ চেত্ আপ কৰিব লাগিব। 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. %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 ত্ৰুটি। 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). %n মডিউল(বোৰ)ৰ বাবে অপেক্ষাৰত। (%n second(s)) (%n second(s)) (%n ছেকেণ্ড) System-requirements checking is complete. চিছ্তেমৰ বাবে প্রয়োজনীয় পৰীক্ষণ সম্পূর্ণ হ'ল। Calamares::ViewManager Setup Failed চেত্ আপ বিফল হ'ল Installation Failed ইনস্তলেচন বিফল হ'ল Would you like to paste the install log to the web? আপুনি ৱেবত ইণ্স্টল ল'গ পেস্ট কৰিব বিচাৰে নেকি? 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. সচাকৈয়ে চলিত ইনস্তল প্ৰক্ৰিয়া বাতিল কৰিব বিচাৰে নেকি? ইনস্তলাৰ বন্ধ হ'ব আৰু গোটেই সলনিবোৰ নোহোৱা হৈ যাব। 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. 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: স্তোৰেজ ডিভাইচ চয়ণ কৰক (&v): 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 কৰা হ'ব আৰু %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> কৰা হ'ব। <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 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 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 চেত্ আপৰ বাবে নিম্নতম আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <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. সুচীৰ পৰা পণ্য এটা বাচনি কৰক। বাচনি কৰা পণ্যটো ইনস্তল হ'ব। ContextualProcessJob Contextual Processes Job প্রাসঙ্গিক প্ৰক্ৰিয়াবোৰৰ কাৰ্য্য CreatePartitionDialog Create a Partition এখন বিভাজন বনাওক Si&ze: আয়তন (&z): MiB MiB Partition &Type: বিভাজনৰ প্ৰকাৰ (&T): &Primary মুখ্য (&P) 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. এইটো মাওন্ট্ পইন্ট্ ইতিমধ্যে ব্যৱহাৰ হৈ আছে। অনুগ্ৰহ কৰি বেলেগ এটা বাচনি কৰক। 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' ডিস্কত নতুন বিভাজন বনোৱাত ইনস্তলাৰটো বিফল হ'ল। 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). <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>. <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. ইনস্তলাৰটোৱে বচনি কৰা ষ্টোৰেজ ডিভাইচত বিভাজন তালিকা বিচাৰি নাপলে। ডিভাইচটোত কোনো বিভাজন তালিকা নাই বা বিভাজন তালিকা বেয়া বা অগ্যাত প্ৰকাৰ। এই ইনস্তলাৰটোৱে আপোনাৰ বাবে নতুন বিভাজন তালিকা স্বত:ভাৱে বনাব পাৰে বা মেন্যুৱেল বিভাজন পেজৰ দ্বাৰা বনাব পাৰে। <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) 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 উপলব্ধ বিভাজন সম্পাদন কৰক Content: সামগ্ৰী: &Keep ৰাখক (&K) Format ফৰ্মেট Warning: Formatting the partition will erase all existing data. সকিয়নি: বিভাজনটো ফৰমেট কৰিলে উপস্থিত থকা গোটেই ডাটা বিলোপ হ'ব। &Mount Point: মাউন্ট পইন্ট (&M): Si&ze: আয়তন (&z): MiB MiB Fi&le System: ফাইল চিছটেম: Flags: ফ্লেগ সমূহ: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. এইটো মাওন্ট্ পইন্ট্ ইতিমধ্যে ব্যৱহাৰ হৈ আছে। অনুগ্ৰহ কৰি বেলেগ এটা বাচনি কৰক। EncryptWidget Form ৰূপ En&crypt system চিছটেম এনক্ৰিপ্ত্ কৰক (&c) Passphrase পাছফ্ৰেছ Confirm passphrase পাছফ্ৰেছ নিশ্ৱিত কৰক Please enter the same passphrase in both boxes. অনুগ্ৰহ কৰি দুয়োটা বাকচত একে পাছফ্ৰেছ প্রবিষ্ট কৰক। 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 পুনৰাৰম্ভ কৰক (&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। 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. %1 ফৰ্মেট বিভাজনৰ সৈতে %2 ফাইল চিছটেম। 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) ইনস্তলাৰটো প্ৰসাশনক (ৰুট) হিছাবে চলি আছে নেকি 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>. <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! অনুগ্ৰহ কৰি কেডিই কনচোল্ ইন্সটল কৰক আৰু পুনৰ চেষ্টা কৰক! 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>. চিছটেমৰ স্থানীয় ছেটিংস্ কমাণ্ডলাইনৰ কিছুমান উপভোক্তা ইন্টাৰফেছ উপাদানৰ ভাষা আৰু আখৰবোৰত প্ৰভাৱ পেলায়। বৰ্তমান ছেটিংস্ হ'ল: <strong>%1</strong>। &Cancel বাতিল কৰক (&C) &OK ঠিক আছে (&O) 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 <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. অনুজ্ঞা-পত্ৰ চুক্তি ব্ৰাউজাৰত দেখাওক। LocalePage Region: ক্ষেত্ৰ: Zone: মন্ডল: &Change... সলনি... (&C) 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. এইটো মেচিন-আইডিৰ বাবে কোনো মাউন্ট্ পইণ্ট্ট্ট্ ছেট কৰা নাই। 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 ইণ্টাৰনেট 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> 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 too few digits পাছৱৰ্ডটোত বহুত কম সংখ্যাক সংখ্যা আছে The password contains too few uppercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম uppercaseৰ বৰ্ণ আছে The password contains fewer than %n lowercase letters The password contains too few lowercase letters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম lowercaseৰ বৰ্ণ আছে The password contains too few non-alphanumeric characters পাছৱৰ্ডটোত বহুত কম সংখ্যাক কম non-alphanumeric বৰ্ণ আছে 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 TextLabel Long Product Description পণ্যৰ দীঘল বিৱৰণ Package Selection পেকেজ নিৰ্বাচন Please pick a product from the list. The selected product will be installed. সুচীৰ পৰা পণ্য এটা বাচনি কৰক। বাচনি কৰা পণ্যটো ইনস্তল হ'ব। 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>একে পাছৱৰ্ড দুবাৰ লিখক, যাতে লিখন ক্ৰুটিৰ পৰীক্ষণ কৰিব পৰা যায়। এটা ভাল পাছৱৰ্ডত বৰ্ণ, সংখ্যা আৰু 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> 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 বনাওক (&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 মূখ্য বিভাজন আছে, আৰু একো যোগ কৰিব নোৱাৰিব। তাৰ সলনি এখন মূখ্য বিভাজন বিলোপ কৰক আৰু এখন প্ৰসাৰিত বিভাজন যোগ কৰক। 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. এখন বিভাজন %1ৰ লগত <strong>সলনি</strong> কৰক। <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 আৰম্ভ কৰিবলৈ এটা EFI চিছটেম থকাটো আৱশ্যক। <br/><br/>এটা EFI চিছটেম কন্ফিগাৰ কৰিবলৈ উভতি যাওক আৰু FAT32 ফাইল চিছটেম এটা বাচনি কৰক যিটোত <strong>%3</strong> ফ্লেগ সক্ষম হৈ আছে আৰু <strong>%2</strong> মাউন্ট্ পইণ্ট্ আছে।<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 আৰম্ভ কৰিবলৈ এটা EFI চিছটেম থকাটো আৱশ্যক। %2 মাউন্ট্ পইন্ট্ নোহোৱকৈ কন্ফিগাৰ কৰা হৈছিল, কিন্তু ইয়াৰ esp ফ্লেগ ছেট কৰা হোৱা নাই। ফ্লেগ্ ছেট কৰিবলৈ উভতি যাওক আৰু বিভাজন সলনি কৰক। আপুনি ফ্লেগ ছেট নকৰাকৈ অগ্ৰসৰ হ'ব পাৰে কিন্তু ইয়াৰ ফলত চিছটেম বিফল হ'ব পাৰে। EFI system partition flag not set 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 পৰ্তিসোন টেবুল কনফিগাৰ কৰিবলৈ ( যদি আগতে কৰা নাই ) পাছলৈ গৈ পৰ্তিসোন টেবুলখনক GPTলৈ পৰিৱৰ্তন কৰক, তাৰপাচত 8 MBৰ উনফোৰমেতেট পৰ্তিতিওন এটা বনাব | <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 পেকেজ বাচনি কৰিব পৰা নগ'ল 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 দেখুৱাব। PlasmaLnfViewStep Look-and-Feel 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> %1 চেত্ আপৰ বাবে পৰামৰ্শ দিয়া আৱশ্যকতা এই কম্পিউটাৰটোৱে পূৰ্ণ নকৰে। <br/>স্থাপন প্ৰক্ৰিয়া অবিৰত ৰাখিব পাৰিব, কিন্তু কিছুমান সুবিধা নিষ্ক্রিয় হৈ থাকিব। 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">সকীয়নি: ইয়ে বাচনি কৰা বিভাজনৰ সকলো ফাইল বিলোপ কৰিব। 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 ডিভাইচটোৰ আয়তন সলনি কৰিব লাগে, কিন্তু কৰিব নোৱাৰি। 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 বিভাজনৰ​ আয়তন সলনি কৰাত বিফল হ'ল। 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> %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 বিভাজন কৰি আছে 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. %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>%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 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) %L1 / %L2 SummaryPage 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. ইনস্তল প্ৰক্ৰিয়া হ'লে কি হ'ব এয়া এটা অৱলোকন। SummaryViewStep Summary সাৰাংশ 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 ব্যৱহাৰকৰ্তাৰ প্ৰতিক্ৰিয়া ঠাকভাৱে কন্ফিগাৰ কৰিব পৰা নগ'ল, কেলামাৰেচ ক্ৰুটি %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>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. 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 প্ৰতিক্ৰিয়া 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ৰ কেলামাৰেচ চেত্ আপ প্ৰগ্ৰামলৈ আদৰণি জনাইছো।</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. <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 আদৰণি WelcomeViewStep Welcome আদৰণি 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> 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 কিবোৰ্ড মডেল Layouts লেআউট Keyboard Layout কিবোৰ্ড লেআউট Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models মডেল Variants ভিন্ন ৰুপ Keyboard Variant Test your keyboard কিবোৰ্ড পৰীক্ষা কৰক localeq Change সলনি notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>এই খিনি ৰিলিজ নোতৰ উদাহৰণ </p> 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> <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 দান কৰক calamares-3.2.41.1/lang/calamares_ast.ts000066400000000000000000006456301410275732300200020ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Páxina balera Calamares::DebugWindow Form Formulariu GlobalStorage GlobalStorage JobQueue JobQueue Modules Módulos Type: Triba: none nada Interface: Interfaz: 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 Calamares::ExecutionViewStep Set up Configuración Install Instalación Calamares::FailJob Job failed (%1) Falló'l trabayu (%1) Programmed job failure was explicitly requested. El fallu del trabayu programáu solicitóse esplicitamente. Calamares::JobThread Done Fecho Calamares::NamedJob Example job (%1) Trabayu d'exemplu (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Executando'l comandu %1 %2 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». 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 Esperando por %n módulos (%n second(s)) (%n segundu) (%n segundos) System-requirements checking is complete. Completóse la comprobación de los requirimientos del sistema. Calamares::ViewManager Setup Failed Falló la configuración Installation Failed Falló la instalación Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program Programa de configuración de %1 %1 Installer Instalador 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'. L'instalador falló al anovar la tabla particiones nel discu «%1». CheckerContainer Gathering system information... Recoyendo la información del sistema... ChoicePage Form Formulariu Select storage de&vice: Esbilla un preséu d'al&macenamientu: Current: Anguaño: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Trabayu de procesos contestuales CreatePartitionDialog Create a Partition Creación d'una partición Si&ze: Tama&ñu: 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 &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. 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». 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) 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. CreateUserJob Create user %1 Creación del usuariu %1 Create user <strong>%1</strong>. Va crease l'usuariu <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. 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. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Trabayu maniquín en C++ EditExistingPartitionDialog Edit Existing Partition Edición d'una partición esistente Content: Conteníu: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. El puntu de montaxe yá ta n'usu. Esbilla otru, por favor. EncryptWidget Form Formulariu En&crypt system &Cifrar el sistema 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. 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> 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>. 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. 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. FinishedQmlViewStep Finish Fin FinishedViewStep 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». 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. HostInfoJob Collecting information about your machine. 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>. InitcpioJob Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Tecláu KeyboardViewStep Keyboard Tecláu 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 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. LicenseViewStep License Llicencia 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. LocalePage Region: Rexón: Zone: Zona: &Change... &Camudar... LocaleQmlViewStep Location Allugamientu LocaleTests Quit LocaleViewStep Location Allugamientu 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. 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 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 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 too few digits La contraseña contién prepocos díxitos The password contains too few uppercase letters La contraseña contién perpoques lletres mayú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 too few non-alphanumeric characters La contraseña contién perpocos caráuteres que nun son alfanumbéricos The password is too short La contraseña ye percurtia The password does not contain enough character classes La contraseña nun contién abondes clases de caráuteres The password contains too many same characters consecutively La contraseña contién milenta caráuteres iguales 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 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 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. PackageChooserViewStep Packages Paquetes PackageModel Name Nome Description Descripción Page_Keyboard Form Formulariu Keyboard Model: Modelu del tecláu: Type here to test your keyboard Teclexa equí pa probar el tecláu Page_UserSetup Form Formulariu 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Va desaniciase</strong>'l discu y va instalase %1. <strong>Replace</strong> a partition with %1. <strong>Va trocase</strong> una partición con %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Nun s'afitó la bandera del sistema EFI 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Aspeutu 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. ProcessResult There was no output from the command. El comandu nun produxo nenguna salida. Output: 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. QObject %1 (%2) %1 (%2) unknown desconozse 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 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. 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 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». ResizeVolumeGroupDialog Resize Volume Group Redimensionar el grupu 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». 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 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 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 . 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Sumariu 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. 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. TrackingPage Form Formulariu Placeholder Espaciu acutáu <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> 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. 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 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 Siguimientu 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 Users Usuarios UsersViewStep Users Usuarios 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: 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 &Known issues &Problemes conocíos Open release notes website &Release notes Notes de &llanzamientu <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. WelcomeQmlViewStep Welcome Acoyida WelcomeViewStep Welcome Acoyida 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Modelos Variants Variantes Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_az.ts000066400000000000000000007067251410275732300176300ustar00rootroot00000000000000 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> açılış mühiti ilə başladılıb.<br><br>BIOS açılış mühitini ayarlamaq üçün quraşdırıcı bölmənin başlanğıcına və ya<strong>Master Boot Record</strong> üzərində <strong>GRUB</strong> və ya <strong>systemd-boot</strong> kimi yükləyici istifadə etməlidir. Əgər bunun avtomatik olaraq qurulmasını istəmirsinizsə özünüz əl ilə bölmələr yarada bilərsiniz. BootLoaderModel Master Boot Record of %1 %1 əsas Ön yükləyici qurmaq Boot Partition Ön yükləyici bölməsi System Partition Sistem bölməsi Do not install a boot loader Ön yükləyicini qurmamaq %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ı Would you like to paste the install log to the web? Quraşdırma jurnalını vebdə yerləşdirmək istəyirsinizmi? 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 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. Cannot get list of temporary mounts. Müvəqqəti qoşulma nöqtələrinin siyahısı alına bilmədi. 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. 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: &Primary &Əsas 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. 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 Content: Tərkib: &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ığı: 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. EncryptWidget Form Format En&crypt system &Şifrələmə sistemi 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. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. Digər əməliyyat sistemini %1 <strong>yanına</strong> quraşdırmaq. <strong>Erase</strong> disk and install %1. Diski <strong>çıxarmaq</strong> və %1 quraşdırmaq. <strong>Replace</strong> a partition with %1. Bölməni %1 ilə <strong>əvəzləmək</strong>. <strong>Manual</strong> partitioning. <strong>Əl ilə</strong> bölüşdürmə. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskində başqa əməliyyat sistemini %1 <strong>yanında</strong> quraşdırmaq. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diskini <strong>çıxartmaq</strong> və %1 quraşdırmaq. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) diskində bölməni %1 ilə <strong>əvəzləmək</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) diskində <strong>əl ilə</strong> bölüşdürmə. Disk <strong>%1</strong> (%2) <strong>%1</strong> (%2) diski Current: Cari: After: Sonra: No EFI system partition configured EFI sistemi bölməsi tənzimlənməyib An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFİ sistemi bölməsi, %1 başlatmaq üçün vacibdir. <br/><br/>EFİ sistemi bölməsini yaratmaq üçün geriyə qayıdın və aktiv edilmiş<strong>%3</strong> bayrağı və <strong>%2</strong> qoşulma nöqtəsi ilə FAT32 fayl sistemi seçin və ya yaradın.<br/><br/>Siz EFİ sistemi bölməsi yaratmadan da davam edə bilərsiniz, lakin bu halda sisteminiz açılmaya bilər. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 başlatmaq üçün EFİ sistem bölməsi vacibdir.<br/><br/>Bölmə <strong>%2</strong> qoşulma nöqtəsi ilə yaradılıb, lakin onun <strong>%3</strong> bayrağı seçilməyib.<br/>Bayrağı seçmək üçün geriyə qayıdın və bölməyə süzəliş edin.<br/><br/>Siz bayrağı seçmədən də davam edə bilərsiniz, lakin bu halda sisteminiz açılmaya bilər. EFI system partition flag not set EFİ sistem bölməsi bayraqı seçilməyib 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>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ö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>bios_grub</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 ResultsListWidget 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 qurulması üçü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 qurulması üçü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 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. 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 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. This program will ask you some questions and set up %2 on your computer. Bu proqram sizə bəi suallar verəcək və %2 sizin komputerinizə qurmağa kömək edəcək. 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 SummaryPage 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. SummaryViewStep Summary Nəticə 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 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 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> 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 Keyboard Model Klaviatura Modeli Layouts Qatlar Keyboard Layout Klaviatura Qatları Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Yazı dili və variantını seçmək üçün üstünlük verdiyiniz klaviatura modelini seçin və ya avadanlıq tərəfindən aşkar edilən klaviaturaya əsaslanan standart birini seçin. Models Modellər Variants Variantlar Keyboard Variant Klaviatura variantı Test your keyboard Klaviaturanızı yoxlayın 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> 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 calamares-3.2.41.1/lang/calamares_az_AZ.ts000066400000000000000000007067301410275732300202160ustar00rootroot00000000000000 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> açılış mühiti ilə başladılıb.<br><br>BIOS açılış mühitini ayarlamaq üçün quraşdırıcı bölmənin başlanğıcına və ya<strong>Master Boot Record</strong> üzərində <strong>GRUB</strong> və ya <strong>systemd-boot</strong> kimi yükləyici istifadə etməlidir. Əgər bunun avtomatik olaraq qurulmasını istəmirsinizsə özünüz əl ilə bölmələr yarada bilərsiniz. BootLoaderModel Master Boot Record of %1 %1 əsas Ön yükləyici qurmaq Boot Partition Ön yükləyici bölməsi System Partition Sistem bölməsi Do not install a boot loader Ön yükləyicini qurmamaq %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ı Would you like to paste the install log to the web? Quraşdırma jurnalını vebdə yerləşdirmək istəyirsinizmi? 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 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. Cannot get list of temporary mounts. Müvəqqəti qoşulma nöqtələrinin siyahısı alına bilmədi. 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. 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: &Primary &Əsas 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. 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 Content: Tərkib: &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ığı: 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. EncryptWidget Form Format En&crypt system &Şifrələmə sistemi 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. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. Digər əməliyyat sistemini %1 <strong>yanına</strong> quraşdırmaq. <strong>Erase</strong> disk and install %1. Diski <strong>çıxarmaq</strong> və %1 quraşdırmaq. <strong>Replace</strong> a partition with %1. Bölməni %1 ilə <strong>əvəzləmək</strong>. <strong>Manual</strong> partitioning. <strong>Əl ilə</strong> bölüşdürmə. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). <strong>%2</strong> (%3) diskində başqa əməliyyat sistemini %1 <strong>yanında</strong> quraşdırmaq. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>%2</strong> (%3) diskini <strong>çıxartmaq</strong> və %1 quraşdırmaq. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>%2</strong> (%3) diskində bölməni %1 ilə <strong>əvəzləmək</strong>. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>%1</strong> (%2) diskində <strong>əl ilə</strong> bölüşdürmə. Disk <strong>%1</strong> (%2) <strong>%1</strong> (%2) diski Current: Cari: After: Sonra: No EFI system partition configured EFI sistemi bölməsi tənzimlənməyib An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFİ sistemi bölməsi, %1 başlatmaq üçün vacibdir. <br/><br/>EFİ sistemi bölməsini yaratmaq üçün geriyə qayıdın və aktiv edilmiş<strong>%3</strong> bayrağı və <strong>%2</strong> qoşulma nöqtəsi ilə FAT32 fayl sistemi seçin və ya yaradın.<br/><br/>Siz EFİ sistemi bölməsi yaratmadan da davam edə bilərsiniz, lakin bu halda sisteminiz açılmaya bilər. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 başlatmaq üçün EFİ sistem bölməsi vacibdir.<br/><br/>Bölmə <strong>%2</strong> qoşulma nöqtəsi ilə yaradılıb, lakin onun <strong>%3</strong> bayrağı seçilməyib.<br/>Bayrağı seçmək üçün geriyə qayıdın və bölməyə süzəliş edin.<br/><br/>Siz bayrağı seçmədən də davam edə bilərsiniz, lakin bu halda sisteminiz açılmaya bilər. EFI system partition flag not set EFİ sistem bölməsi bayraqı seçilməyib 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>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ö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>bios_grub</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 ResultsListWidget 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 qurulması üçü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 qurulması üçü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 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. 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 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. This program will ask you some questions and set up %2 on your computer. Bu proqram sizə bəi suallar verəcək və %2 sizin komputerinizə qurmağa kömək edəcək. 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 SummaryPage 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. SummaryViewStep Summary Nəticə 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 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 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> 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 Keyboard Model Klaviatura Modeli Layouts Qatlar Keyboard Layout Klaviatura Qatları Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Yazı dili və variantını seçmək üçün üstünlük verdiyiniz klaviatura modelini seçin və ya avadanlıq tərəfindən aşkar edilən klaviaturaya əsaslanan standart birini seçin. Models Modellər Variants Variantlar Keyboard Variant Klaviatura variantı Test your keyboard Klaviaturanızı yoxlayın 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> 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 calamares-3.2.41.1/lang/calamares_be.ts000066400000000000000000007546701410275732300176060ustar00rootroot00000000000000 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 Галоўны загрузачны запіс (MBR) %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 модуляў. Чакаецца %n модуляў. (%n second(s)) (%n секунда) (%n секунды) (%n секунд) (%n секунд) System-requirements checking is complete. Праверка адпаведнасці сістэмным патрабаванням завершаная. Calamares::ViewManager Setup Failed Усталёўка схібіла Installation Failed Не атрымалася ўсталяваць Would you like to paste the install log to the web? Сапраўды хочаце ўставіць журнал усталёўкі па сеціўным адрасе? 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 traceback, што немагчыма разабраць 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: Сістэмны раздзел 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/> На гэтай прыладзе ўжо ўсталяваная аперацыйная сістэма, але табліца раздзелаў <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 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 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.<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. Калі ласка, абярыце прадукт са спіса. Абраны прадукт будзе ўсталяваны. ContextualProcessJob Contextual Processes Job Кантэкстуальныя працэсы CreatePartitionDialog Create a Partition Стварыць раздзел Si&ze: Па&мер: MiB Міб Partition &Type: &Тып раздзела: &Primary &Асноўны 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. Пункт мантавання ўжо выкарыстоўваецца. Калі ласка, абярыце іншы. 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>. 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 з’яўляецца састарэлым.<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 Рэдагаваць існы раздзел Content: Змесціва: &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: Mountpoint already in use. Please select another one. Пункт мантавання ўжо выкарыстоўваецца. Калі ласка, абярыце іншы. EncryptWidget Form Форма En&crypt system Сістэма &шыфравання Passphrase Пароль Confirm passphrase Пацвердзіце парольную фразу Please enter the same passphrase in both boxes. Калі ласка, увядзіце адную і тую парольную фразу ў абодва радкі. 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/>Вы можаце перазапусціць камп’ютар і ўвайсці ў яе, альбо працягнуць працу ў 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 Завяршыць 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 даступна прынамсі %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 &Добра 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 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. Не атрымалася стварыць файл ключа 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 Медыя 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 У паролі менш %n малой літары У паролі менш %n малых літар У паролі менш %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 лічбаў Пароль змяшчае менш %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 Пароль пусты PackageChooserPage Form Форма Product Name Назва TextLabel Тэкст Long Product Description Занадта доўгае апісанне Package Selection Выбар пакункаў Please pick a product from the list. The selected product will be installed. Калі ласка, абярыце прадукт са спіса. Абраны прадукт будзе ўсталяваны. 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>Увядзіце двойчы аднолькавы пароль. Гэта неабходна для таго, каб пазбегнуць памылак. Надзейны пароль павінен складацца з літар, лічбаў, знакаў пунктуацыі. Ён павінен змяшчаць прынамсі 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 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 Раздзелы 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). Усталяваць %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.<br/><br/> Каб наладзіць сістэмны раздзел EFI, вярніцеся назад, абярыце альбо стварыце файлавую сістэму FAT32 са сцягам <strong>%3</strong> і пунктам мантавання <strong>%2</strong>.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Для таго, каб пачаць %1, патрабуецца сістэмны раздзел EFI.<br/><br/>Быў наладжаны раздзел з пунктам мантавання<strong>%2</strong> але яго сцяг <strong>%3</strong> не вызначаны.<br/>Каб вызначыць сцяг, вярніцеся назад і адрэдагуйце раздзел.<br/><br/> Вы можаце працягнуць без наладкі раздзела, але ваша сістэма можа не загрузіцца. EFI system partition flag not set Не вызначаны сцяг сістэмнага раздзела 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/>Гэты раздзел патрэбны для запуску %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 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 %1 (%2) %1 (%2) unknown невядома 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 Выдаліць часовага карыстальніка з мэтавай сістэмы 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, таму змяніць яе памер немагчыма. 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> Гэты камп’ютар не адпавядае мінімальным патрэбам для ўсталёўкі %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 Падзел 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 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>%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 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 Наступныя групы адсутнічаюць у мэтавай сістэме: %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 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. Гэта агляд дзеянняў, якія здейсняцца падчас запуску працэдуры ўсталёўкі. SummaryViewStep Summary Агулам 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 Зваротная сувязь 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: Колькасць 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>Вітаем у праграме ўсталёўкі 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/>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 Вітаем 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/> Аўтарскія правы 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 %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> 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 Мадэль клавіятуры Layouts Раскладкі Keyboard Layout Раскладка клавіятуры Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Пстрыкніце на пераважную мадэль клавіятуры, каб абраць раскладку і варыянт, альбо выкарыстоўвайце прадвызначаную ў залежнасці ад выяўленага абсталявання. Models Мадэлі Variants Варыянты Keyboard Variant Варыянт клавіятуры Test your keyboard Пратэстуйце сваю клавіятуру localeq Change Змяніць notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Гэта прыклад нататак да выпуску.</p> 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> <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 Ахвяраваць calamares-3.2.41.1/lang/calamares_bg.ts000066400000000000000000006520531410275732300176000ustar00rootroot00000000000000 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. 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 за 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>. 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 Неуспешна инсталация Would you like to paste the install log to the web? 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. Наистина ли искате да отмените текущият процес на инсталиране? Инсталатора ще прекъсне и всичките промени ще бъдат загубени. CalamaresPython::Helper Unknown exception type Неизвестен тип изключение unparseable Python error неанализируема грешка на Python unparseable Python traceback неанализируемо проследяване на Python Unfetchable Python error. Недостъпна грешка на Python. 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'. Инсталатора не успя да актуализира таблица на дяловете на диск '%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. 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> всички данни върху устройството за съхранение. <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 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 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 %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. Инсталацията на %1 е завършена. Package Selection Please pick a product from the list. The selected product will be installed. ContextualProcessJob Contextual Processes Job Задача с контекстуални процеси CreatePartitionDialog Create a Partition Създай дял Si&ze: Раз&мер: MiB MiB Partition &Type: &Тип на дяла: &Primary &Основен 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. Точката за монтиране вече се използва. Моля изберете друга. 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'. 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. 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>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]) 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 Фиктивна С++ задача EditExistingPartitionDialog Edit Existing Partition Редактирай съществуващ дял Content: Съдържание: &Keep &Запази Format Форматирай Warning: Formatting the partition will erase all existing data. Предупреждение: Форматирането на дялът ще изтрие всички съществуващи данни. &Mount Point: &Точка на монтиране: Si&ze: Раз&мер: MiB MiB Fi&le System: Фа&йлова система: Flags: Флагове: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Точката за монтиране вече се използва. Моля изберете друга. EncryptWidget Form Форма En&crypt system Крип&тиране на системата Passphrase Парола Confirm passphrase Потвърди паролата Please enter the same passphrase in both boxes. Моля, въведете еднаква парола в двете полета. 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. <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. 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. Форматирай дял %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 е свързан към интернет 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 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 &ОК 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 драйвър</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. 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. Генерирай 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' Грешка при разпределяне на паметта по време на настройването на '%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 TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. 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 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 Дялове 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). Инсталирай %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Не е зададен флаг на EFI системен дял 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. 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 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 ГБ. <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 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'. 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 Системни изисквания 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 Разделяне 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. Set flags on new partition. Задай флагове на нов дял. Clear flags on partition <strong>%1</strong>. Изчисти флаговете на дял <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>. Сложи флаг на дял <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. 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. 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 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. Това е преглед на промените, които ще се извършат, след като започнете процедурата по инсталиране. SummaryViewStep Summary Обобщение 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 Обратна връзка 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 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>Добре дошли в инсталатора 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. WelcomeQmlViewStep Welcome Добре дошли WelcomeViewStep Welcome Добре дошли 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_bn.ts000066400000000000000000006435161410275732300176130ustar00rootroot00000000000000 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 ইনস্টলেশন ব্যর্থ হলো Would you like to paste the install log to the web? 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 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition একটি পার্টিশন তৈরি করুন Si&ze: আএবংকার MiB Partition &Type: পার্টিশন এবংধরন: &Primary এবংপ্রাথমিক 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. 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 বিদ্যমান পার্টিশন সম্পাদনা করুন Content: বিষয়বস্তু: &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: Mountpoint already in use. Please select another one. EncryptWidget Form ফর্ম En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 পার্টিশনগুলো Install %1 <strong>alongside</strong> another operating system. অন্য অপারেটিং সিস্টেমের <strong>পাশাপাশি</strong> %1 ইনস্টল করুন। <strong>Erase</strong> disk and install %1. ডিস্ক <strong>মুছে ফেলুন</strong> এবং %1 সংস্থাপন করুন। <strong>Replace</strong> a partition with %1. %1 দিয়ে একটি পার্টিশন <strong>প্রতিস্থাপন করুন</strong>। <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. %1 দিয়ে <strong>%2</strong> (%3) ডিস্কে একটি পার্টিশন <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. 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) SummaryPage 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. আপনি ইনস্টল প্রক্রিয়া শুরু করার পর কি হবে তার একটি পর্যালোচনা। SummaryViewStep Summary সারাংশ 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 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 স্বাগতম 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ca.ts000066400000000000000000007070711410275732300175740ustar00rootroot00000000000000 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. 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) 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. 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ó Calamares::ExecutionViewStep Set up Configuració Install Instal·la 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. 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" al sistema de destinació. Run command '%1'. Executa l'ordre "%1". Running command %1 %2 S'executa l'ordre %1 %2 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". 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. S'esperen %n mòduls. (%n second(s)) (%n segon) (%n segons) System-requirements checking is complete. S'ha completat la comprovació dels requeriments del sistema. Calamares::ViewManager Setup Failed Ha fallat la configuració. Installation Failed La instal·lació ha fallat. Would you like to paste the install log to the web? Voleu enganxar el registre d'instal·lació a la xarxa? 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. 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. CalamaresWindow %1 Setup Program Programa de configuració %1 %1 Installer Instal·lador de %1 ChangeFilesystemLabelJob 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... ChoicePage Form Formulari Select storage de&vice: Seleccioneu un dispositiu d'e&mmagatzematge: Current: Actual: 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. <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 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 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. 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. Config 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. 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ó 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. ContextualProcessJob Contextual Processes Job Tasca de procés contextual CreatePartitionDialog Create a Partition Crea una partició Si&ze: Mi&da: 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 &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. 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'. 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) 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. CreateUserJob Create user %1 Crea l'usuari %1 Create user <strong>%1</strong>. Crea l'usuari <strong>%1</strong>. Preserving home directory Es preserva el directori personal Creating user %1 Es crea l'usuari %1. Configuring user %1 Es configura l'usuari %1 Setting file permissions S'estableixen 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. 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". 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Tasca C++ fictícia EditExistingPartitionDialog Edit Existing Partition Edita la partició existent Content: Contingut: &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: Label for the filesystem Etiqueta per al sistema de fitxers FS Label: Etiqueta del sistema de fitxers: Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Si us plau, seleccioneu-ne un altre. EncryptWidget Form Formulari En&crypt system En&cripta el sistema 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. 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> 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>. 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. 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 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. FinishedQmlViewStep Finish Acaba FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Es recopila 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 write to file <code>%1</code>. No s'ha pogut escriure al fitxer <code>%1</code>. InitcpioJob Creating initramfs with mkinitcpio. Es creen initramfs amb mkinitcpio. InitramfsJob Creating initramfs. Es creen initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclat KeyboardViewStep Keyboard Teclat 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 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. 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 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. LocalePage Region: Regió: Zone: Zona: &Change... &Canvia... LocaleQmlViewStep Location Ubicació LocaleTests Quit Surt LocaleViewStep Location Ubicació 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. 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 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 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> 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 too few digits La contrasenya conté massa pocs dígits. The password contains too few uppercase letters La contrasenya conté massa poques lletres majú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 too few non-alphanumeric characters La contrasenya conté massa pocs caràcters no alfanumèrics. The password is too short La contrasenya és massa curta. The password does not contain enough character classes La contrasenya no conté prou classes de caràcters. The password contains too many same characters consecutively La contrasenya conté massa caràcters iguals consecutius. 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 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. 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. PackageChooserViewStep Packages Paquets PackageModel Name Nom Description Descripció Page_Keyboard Form Formulari Keyboard Model: Model del teclat: Type here to test your keyboard Escriviu aquí per comprovar el teclat Page_UserSetup Form Formulari 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 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 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Esborra</strong> el disc i instal·la-hi %1. <strong>Replace</strong> a partition with %1. <strong>Reemplaça</strong> una partició amb %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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>%3</strong>. <br/>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. EFI system partition flag not set No s'ha establert la bandera de la partició EFI del sistema 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. 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ó. 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. 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ó. PlasmaLnfViewStep Look-and-Feel Aspecte i comportament 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. ProcessResult There was no output from the command. No hi ha hagut sortida de l'ordre. Output: 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. QObject %1 (%2) %1 (%2) unknown desconeguda 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ó 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". 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. 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 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 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ó 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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ó. SummaryViewStep Summary Resum 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. 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. TrackingPage Form Formulari Placeholder Marcador de posició <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> 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 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 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 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 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 Users Usuaris UsersViewStep Users Usuaris 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: 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 &Known issues &Problemes coneguts Open release notes website Obre el lloc web de les notes de la versió &Release notes &Notes de la versió <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/>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 Benvingut/da WelcomeViewStep Welcome Benvingut/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/> 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 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. 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> 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 keyboardq Keyboard Model Model del teclat Layouts Disposicions Keyboard Layout Disposició del teclat Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Cliqueu al model de teclat preferit per seleccionar-ne la disposició i la variant, o useu el predeterminat basat en el maquinari detectat. Models Models Variants Variants Keyboard Variant Variant del teclat Test your keyboard Proveu el teclat. localeq Change Canvia-ho 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> 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ó calamares-3.2.41.1/lang/calamares_ca@valencia.ts000066400000000000000000007014301410275732300213700ustar00rootroot00000000000000 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. 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). (%n second(s)) System-requirements checking is complete. Ha acabat la verificació dels requeriments del sistema. Calamares::ViewManager Setup Failed S'ha produït un error en la configuració. Installation Failed La instal·lació ha fallat. Would you like to paste the install log to the web? Voleu enganxar el registre d'instal·lació a la xarxa? 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 Calamares Initialization Failed La inicialització del Calamares ha fallat. %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 Go &back &Arrere &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. &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. 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. S'ha produït un error de Python irrecuperable. CalamaresWindow %1 Setup Program Programa de configuració %1 %1 Installer Instal·lador 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... S'està obtenint la informació del sistema... ChoicePage Form Formulari Select storage de&vice: Seleccioneu un dispositiu d'e&mmagatzematge: Current: Actual: 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. <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 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. No es pot obtindre la llista dels muntatges temporals. 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 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. Els números i les dates de la configuració local s'establiran en %1. 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. ContextualProcessJob Contextual Processes Job Tasca de procés contextual CreatePartitionDialog Create a Partition Creació d'una partició Si&ze: Mi&da: MiB MiB 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 &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. 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>. Preserving home directory S'està preservant el directori personal Creating user %1 S'està creant l'usuari %1. Configuring user %1 S'està configurant l'usuari %1 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 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 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 Content: Contingut: &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: Punt de &muntatge: Si&ze: Mi&da: MiB MiB Fi&le System: S&istema de fitxers: Flags: Marcadors: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. El punt de muntatge ja està en ús. Seleccioneu-ne un altre. EncryptWidget Form Formulari En&crypt system En&cripta el sistema Passphrase Contrasenya Confirm passphrase Confirmeu la contrasenya Please enter the same passphrase in both boxes. Escriviu la mateixa contrasenya en les dues caselles. FillGlobalStorageJob Set partition information Estableix la informació de la partició Install %1 on <strong>new</strong> %2 system partition with features <em>%3</em> 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 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 té 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 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 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 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 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 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 Region: Regió: Zone: Zona: &Change... &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 Internet Internet Theming Tema Gaming Jugant 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. 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 La contrasenya és massa llarga. 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 too few lowercase letters La contrasenya no conté prou lletres en minúscula. The password contains too few non-alphanumeric characters La contrasenya no conté prou caràcters no alfanumèrics. The password is too short La contrasenya és massa curta. The password does not contain enough character classes La contrasenya no conté prou tipus de caràcters. The password contains too many same characters consecutively La contrasenya conté consecutivament massa caràcters idèntics. 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 The password contains monotonic sequence longer than %n characters The password contains too long of a monotonic character sequence La contrasenya conté una seqüència monòtona de caràcters massa gran. 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. 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. 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? 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 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 Install %1 <strong>alongside</strong> another operating system. Instal·la %1 <strong>al costat</strong> d'un altre sistema operatiu. <strong>Erase</strong> disk and install %1. <strong>Esborra</strong> el disc i instal·la-hi %1. <strong>Replace</strong> a partition with %1. <strong>Reemplaça</strong> una partició amb %1. <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 en el 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Cal una partició EFI de sistema per a iniciar %1. <br/><br/>Per a configurar una partició EFI de sistema, torneu arrere i seleccioneu o creeu un sistema de fitxers FAT32 amb el marcador <strong>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Cal una partició EFI de sistema per a iniciar %1. <br/><br/> Ja s'ha configurat una partició amb el punt de muntatge <strong>%2</strong> però no se n'ha establit el marcador <strong>%3</strong>. <br/>Per a establir-la-hi, torneu arrere i editeu la partició. <br/><br/>Podeu continuar sense establir la bandera, però el sistema podria no iniciar-se. EFI system partition flag not set No s'ha establit el marcador de la partició EFI del sistema 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>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 a configurar una taula de particions GPT en un sistema BIOS, (si no s'ha fet ja) torneu arrere i establiu la taula de particions a GPT, després creeu una partició sense formatar de 8 MB amb el marcador <strong>bios_grub</strong> habilitada.<br/><br/>Cal una partició sense format de 8 MB per a iniciar %1 en un sistema BIOS amb 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 %1 (%2) %1 (%2) unknown desconegut 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. 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 Requisits de 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 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. 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 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>%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 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. 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 set timezone. No es pot establir el fus horari. 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 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ó. SummaryViewStep Summary Resum 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. 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>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> 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 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 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 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ó 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 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 &About &Quant a 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 &Known issues &Incidències conegudes Open release notes website Obri el lloc web de les notes de la versió &Release notes &Notes de la versió <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. <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 WelcomeViewStep Welcome Benvingut 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/> 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 %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> 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 Model de teclat Layouts Disposicions Keyboard Layout Disposició del teclat Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Cliqueu en el model de teclat preferit per a seleccionar-ne la disposició i la variant, o useu el predeterminat basat en el maquinari detectat. Models Models Variants Variants Keyboard Variant Variant del teclat Test your keyboard Comproveu el teclat. localeq 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> 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> <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 calamares-3.2.41.1/lang/calamares_cs_CZ.ts000066400000000000000000006774601410275732300202220ustar00rootroot00000000000000 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>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. 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) Calamares::BlankViewStep Blank Page Prázdná stránka Calamares::DebugWindow Form Formulář GlobalStorage Globální úložiště JobQueue Zpracovává se Modules Moduly Type: Typ: none žádný Interface: Rozhraní: 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 Znovunačíst sešit se styly Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Strom widgetu Debug information Ladící informace Calamares::ExecutionViewStep Set up Nastavit Install Instalovat 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. Calamares::JobThread Done Hotovo Calamares::NamedJob Example job (%1) Úloha pro ukázku (%1) 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 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í. 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í.. Boost.Python error in job "%1". Boost.Python chyba ve skriptu „%1“. 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 Čeká se na %n moduly Čeká se na %n modulů Čeká se na %n moduly (%n second(s)) (%n sekundu) (%n sekundy) (%n sekund) (%n sekundy) System-requirements checking is complete. Kontrola požadavků na systém dokončena. Calamares::ViewManager Setup Failed Nastavení se nezdařilo Installation Failed Instalace se nezdařila Would you like to paste the install log to the web? Chcete vyvěsit záznam událostí při instalaci na web? 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 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. 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. CalamaresWindow %1 Setup Program Instalátor %1 %1 Installer %1 instalátor 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'. Instalátoru se nezdařilo aktualizovat tabulku oddílů na jednotce „%1“. CheckerContainer Gathering system information... Shromažďování informací o systému… ChoicePage Form Formulář Select storage de&vice: &Vyberte úložné zařízení: Current: Stávající: 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í. <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 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 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. 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. Config 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. 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. 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: No package list) 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/>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 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! Setup Failed Nastavení se nezdařilo Installation Failed Instalace se nezdařila The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. 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. ContextualProcessJob Contextual Processes Job Úloha kontextuálních procesů CreatePartitionDialog Create a Partition Vytvořit oddíl Si&ze: &Velikost: 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 &Mount Point: &Přípojný bod: Flags: Příznaky: Label for the filesystem FS Label: 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ý. 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. 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>. 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>. 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“. 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) 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. CreateUserJob Create user %1 Vytvořit uživatele %1 Create user <strong>%1</strong>. Vytvořit uživatele <strong>%1</strong>. Preserving home directory Zachování domovského adresáře Creating user %1 Vytváření uživatele %1 Configuring user %1 Konfigurace uživatele %1 Setting file permissions Nastavení oprávnění souboru CreateVolumeGroupDialog Create Volume Group Vytvořit skupinu svazků 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“. 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. 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. DeviceInfoWidget 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ů. 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) 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 DummyCppJob Dummy C++ Job Výplňová úloha C++ EditExistingPartitionDialog Edit Existing Partition Upravit existující oddíl Content: Obsah: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Tento přípojný bod je už používán – vyberte jiný. EncryptWidget Form Formulář En&crypt system Z&ašifrovat systém 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. FillGlobalStorageJob Set partition information Nastavit informace o oddílu Install %1 on <strong>new</strong> %2 system partition with features <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> 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>. Nainstalovat %2 na %3 systémový oddíl <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Nainstalovat zavaděč do <strong>%1</strong>. Setting up mount points. Nastavují se přípojné body. 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. FinishedQmlViewStep Finish Dokončit FinishedViewStep 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“. 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. HostInfoJob Collecting information about your machine. Shromažďují se informací o stroji. 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>. InitcpioJob Creating initramfs with mkinitcpio. Vytváření initramfs pomocí mkinitcpio. InitramfsJob Creating initramfs. Vytváření initramfs. 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Klávesnice KeyboardViewStep Keyboard Klávesnice LCLocaleDialog System locale setting 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 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. 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 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. LocalePage Region: Oblast: Zone: Pásmo: &Change... &Změnit… LocaleQmlViewStep Location Poloha LocaleTests Quit LocaleViewStep Location Poloha 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. 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á 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. 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 NotesQmlViewStep Notes Poznámky 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> 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. Timezone: %1 Časová zóna: %1 Select your preferred Zone within your Region. Vyberte preferovanou zónu ve vašem regionu. Zones Zóny 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 too few digits Heslo obsahuje příliš málo číslic The password contains too few uppercase letters Heslo obsahuje příliš málo velkých písmen The password contains fewer than %n lowercase letters The password contains too few lowercase letters Heslo obsahuje příliš málo malých písmen The password contains too few non-alphanumeric characters Heslo obsahuje příliš málo speciálních znaků The password is too short Heslo je příliš krátké The password does not contain enough character classes Heslo není tvořeno dostatečným počtem druhů znaků The password contains too many same characters consecutively Heslo obsahuje příliš mnoho stejných znaků 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 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 Heslo je otočenou verzí některého z předchozích 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 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é PackageChooserPage Form Form 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. PackageChooserViewStep Packages Balíčky PackageModel Name Název Description Popis Page_Keyboard Form Formulář Keyboard Model: Model klávesnice: Type here to test your keyboard Klávesnici vyzkoušíte psaním sem Page_UserSetup Form Formulář 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 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> 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 PartitionModel Free Space Volné místo New partition Nový oddíl Name Název File System Souborový systém File System Label Mount Point Přípojný bod Size Velikost PartitionPage Form Form Storage de&vice: Ú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. 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. <strong>Erase</strong> disk and install %1. <strong>Smazat</strong> obsah jednotky a nainstalovat %1. <strong>Replace</strong> a partition with %1. <strong>Nahradit</strong> oddíl %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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>%3</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. EFI system partition flag not set Příznak EFI systémového oddílu není nastavený 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. 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. 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 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í. PlasmaLnfViewStep Look-and-Feel Vzhled a dojem z 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. ProcessResult There was no output from the command. Příkaz neposkytl žádný výstup. Output: 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. QObject %1 (%2) %1 (%2) unknown neznámý 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 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“. 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é 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“. ResizeVolumeGroupDialog Resize Volume Group Změnit velikost skupiny svazků 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“. 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 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 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. 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. 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 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. 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. 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 nelze vytvořit skupiny These groups are missing in the target system: %1 SetupSudoJob Configure <pre>sudo</pre> users. Nakonfigurujte <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ů SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Souhrn 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. TrackingKUserFeedbackJob KDE user feedback Zpětná vazba uživatele 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 KDE uživatele, chyba ve skriptu %1. Could not configure KDE user feedback correctly, Calamares error %1. Nepodařilo se správně nastavit zpětnou vazbu KDE uživatele, chyba Calamares %1. TrackingMachineUpdateManagerJob Machine feedback Zpětná vazba stroje Configuring machine feedback. Nastavování zpětné vazby stroje Error in machine feedback configuration. Chyba v nastavení zpětné vazby stroje. Could not configure machine feedback correctly, script error %1. Nepodařilo se správně nastavit zpětnou vazbu 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. TrackingPage Form Form Placeholder Výplň <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> 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 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 poslány <b>pouze jednorázově</b> po dokončení instalace. 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 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 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 Users Uživatelé UsersViewStep Users Uživatelé 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ů: 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ů &Known issues &Známé problémy Open release notes website Otevřít webovou stránku s poznámkami k vydání &Release notes &Poznámky k vydání <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/>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 WelcomeViewStep Welcome Vítejte 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/> 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 %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> 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 keyboardq Keyboard Model Model klávesnice Layouts Rovzržení Keyboard Layout Rozvržení klávesnice Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Kliknutím na preferovaný model klávesnice vyberte rozvržení a variantu nebo použijte výchozí na základě zjištěného hardwaru. Models Modely Variants Varianty Keyboard Variant Varianta klávesnice Test your keyboard Vyzkoušejte si svou klávesnici localeq Change Změnit notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Toto je příklad poznámek k vydání.</p> 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í administrátorských úkolů 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. 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. Tento název se použije, pokud počítač zviditelníte ostatním v síti. localhost is not allowed as hostname. 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. Zadejte dvakrát stejné heslo, aby bylo možné zkontrolovat chyby při psaní. Dobré heslo by mělo obsahovat směs písmen, čísel a interpunkce a mělo by mít alespoň osm znaků. Zvažte také jeho pravidelnou změnu. 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řihlaste se automaticky bez zadávání hesla Only letters, numbers, underscore and hyphen are allowed, minimal of two characters. Reuse user password as root password Použijte uživatelské heslo zároveň jako heslo 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 Opakujte root heslo Enter the same password twice, so that it can be checked for typing errors. Zadejte dvakrát stejné heslo, aby bylo možné zkontrolovat chyby při psaní. 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 calamares-3.2.41.1/lang/calamares_da.ts000066400000000000000000006714371410275732300176030ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Tom side Calamares::DebugWindow Form Formular GlobalStorage Globalt lager JobQueue Jobkø Modules Moduler Type: Type: none ingen Interface: Grænseflade: 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 Calamares::ExecutionViewStep Set up Opsæt Install Installation Calamares::FailJob Job failed (%1) Job mislykkedes (%1) Programmed job failure was explicitly requested. Mislykket programmeret job blev udtrykkeligt anmodet. Calamares::JobThread Done Færdig Calamares::NamedJob Example job (%1) Eksempeljob (%1) 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 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". 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 modul(er). (%n second(s)) (%n sekund) (%n sekund(er)) System-requirements checking is complete. Tjek af systemkrav er fuldført. Calamares::ViewManager Setup Failed Opsætningen mislykkedes Installation Failed Installation mislykkedes Would you like to paste the install log to the web? Vil du indsætte installationsloggen på webbet? 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 &Opsæt nu &Install now &Installér nu Go &back Gå &tilbage &Set up &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. 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. CalamaresWindow %1 Setup Program %1-opsætningsprogram %1 Installer %1-installationsprogram 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'. Installationsprogrammet kunne ikke opdatere partitionstabel på disk '%1'. CheckerContainer Gathering system information... Indsamler systeminformation ... ChoicePage Form Formular Select storage de&vice: Vælg lageren&hed: Current: Nuværende: 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. <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 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 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. 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. Config Set keyboard model to %1.<br/> Indstil tastaturmodel til %1.<br/> Set keyboard layout to %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. Systemets sprog indstilles til %1. The numbers and dates locale will be set to %1. Lokalitet for tal og datoer indstilles til %1. 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) 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. ContextualProcessJob Contextual Processes Job Kontekstuelt procesjob CreatePartitionDialog Create a Partition Opret en partition Si&ze: &Størrelse: MiB MiB Partition &Type: Partitions&type: &Primary &Primær 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. 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'. 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) 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. CreateUserJob Create user %1 Opret brugeren %1 Create user <strong>%1</strong>. Opret brugeren <strong>%1</strong>. Preserving home directory Bevarer hjemmemappe Creating user %1 Configuring user %1 Konfigurerer brugeren %1 Setting file permissions Indstiller filtilladelser CreateVolumeGroupDialog Create Volume Group Opret diskområdegruppe 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++-job EditExistingPartitionDialog Edit Existing Partition Redigér eksisterende partition Content: Indhold: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Monteringspunktet er allerede i brug. Vælg venligst et andet. EncryptWidget Form Formular En&crypt system Kryp&tér system Passphrase Adgangskode Confirm passphrase Bekræft adgangskode Please enter the same passphrase in both boxes. Indtast venligst samme adgangskode i begge bokse. 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> 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>. Install boot loader on <strong>%1</strong>. Installér bootloader på <strong>%1</strong>. Setting up mount points. Opsætter monteringspunkter. 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 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. FinishedQmlViewStep Finish Færdig FinishedViewStep 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'. 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 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. HostInfoJob Collecting information about your machine. Indsamler information om din maskine. 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>. InitcpioJob Creating initramfs with mkinitcpio. Opretter initramfs med mkinitcpio. InitramfsJob Creating initramfs. Opretter initramfs. 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Tastatur KeyboardViewStep Keyboard Tastatur 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 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 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 i vilkårne vil der ikke blive installeret proprietær software, og open source-alternativer vil blive brugt i stedet. LicenseViewStep License Licens 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. LocalePage Region: Område: Zone: Zone: &Change... &Skift ... LocaleQmlViewStep Location Placering LocaleTests Quit LocaleViewStep Location Placering 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. 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 NotesQmlViewStep Notes Noter 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> 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 too few digits Adgangskoden indeholder for få cifre The password contains too few uppercase letters Adgangskoden indeholder for få bogstaver med stort 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 too few non-alphanumeric characters Adgangskoden indeholder for få ikke-alfanumeriske tegn The password is too short Adgangskoden er for kort The password does not contain enough character classes Adgangskoden indeholder ikke nok tegnklasser The password contains too many same characters consecutively Adgangskoden indeholder for mange af de samme tegn 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 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 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. PackageChooserViewStep Packages Pakker PackageModel Name Navn Description Beskrivelse Page_Keyboard Form Formular Keyboard Model: Tastaturmodel: Type here to test your keyboard Skriv her for at teste dit tastatur Page_UserSetup Form Formular 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 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> 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 PartitionModel Free Space Ledig plads New partition Ny partition Name Navn File System Filsystem File System Label Mount Point Monteringspunkt Size Størrelse 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. 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. <strong>Erase</strong> disk and install %1. <strong>Slet</strong> disk og installér %1. <strong>Replace</strong> a partition with %1. <strong>Erstat</strong> en partition med %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. En EFI-systempartition er nødvendig for at starte %1.<br/><br/>En partition var konfigureret med monteringspunkt <strong>%2</strong>, men dens <strong>%3</strong>-flag var ikke indstillet.<br/>For at indstille 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. EFI system partition flag not set EFI-systempartitionsflag ikke sat 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. 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å. 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 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. PlasmaLnfViewStep Look-and-Feel Udseende og fremtoning 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. ProcessResult There was no output from the command. Der var ikke nogen output fra kommandoen. Output: 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. QObject %1 (%2) %1 (%2) unknown ukendt 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 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'. 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å 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. 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'. ResizeVolumeGroupDialog Resize Volume Group Ændr størrelse på diskområdegruppe 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'. 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 SetHostNameJob Set hostname %1 Indstil værtsnavn %1 Set hostname <strong>%1</strong>. Indstil værtsnavn <strong>%1</strong>. Setting hostname %1. Indstiller værtsnavn %1. Internal Error Intern fejl Cannot write hostname to target system Kan ikke skrive værtsnavn til destinationssystem SetKeyboardLayoutJob Set keyboard model to %1, layout to %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. SetPartFlagsJob Set flags on partition %1. Indstil flag på partition %1. Set flags on %1MiB %2 partition. Indstil flag på %1 MiB %2 partition. Set flags on new 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. 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>. 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. Indstiller flag <strong>%1</strong> på ny partition. The installer failed to set flags on partition %1. Installationsprogrammet kunne ikke indstille flag på partition %1. SetPasswordJob Set password for user %1 Indstil adgangskode for brugeren %1 Setting password for user %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 indstille adgangskode for brugeren %1. usermod terminated with error code %1. usermod stoppet med fejlkoden %1. SetTimezoneJob Set timezone to %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 indstille tidszone. Link creation failed, target: %1; link name: %2 Oprettelse af link mislykkedes, destination: %1; linknavn: %2 Cannot set timezone, 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1/%L2 SummaryPage 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. SummaryViewStep Summary Opsummering 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. 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. 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, fejl i script %1. Could not configure machine feedback correctly, Calamares error %1. Kunne ikke konfigurere maskinfeedback korrekt, fejl i Calamares %1. TrackingPage Form Formular Placeholder Pladsholder <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> 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 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 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 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 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 Users Brugere UsersViewStep Users Brugere 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: WelcomePage Form Formular Select application and system language 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 &Known issues &Kendte problemer Open release notes website Åbn websted med udgivelsesnoter &Release notes &Udgivelsesnoter <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-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 WelcomeViewStep Welcome Velkommen 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/> 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> er sponsoreret af <br/> <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> 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 keyboardq Keyboard Model Tastaturmodel Layouts Layouts Keyboard Layout Tastaturlayout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Klik på din foretrukne tastaturmodel for at vælge layout og variant, eller brug den som er standard baseret på det registrerede hardware. Models Modeller Variants Varianter Keyboard Variant Tastaturvariant Test your keyboard Test dit tastatur localeq Change Skift notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dette er eksempler på udgivelsesnoter.</p> 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 calamares-3.2.41.1/lang/calamares_de.ts000066400000000000000000007065661410275732300176110ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Leere Seite Calamares::DebugWindow Form Formular GlobalStorage Globale Einstellungen JobQueue Job-Queue Modules Module Type: Typ: none keiner Interface: Schnittstelle: 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 Calamares::ExecutionViewStep Set up Einrichtung Install Installieren Calamares::FailJob Job failed (%1) Auftrag fehlgeschlagen (%1) Programmed job failure was explicitly requested. Die Unterlassung einer vorgesehenen Aufgabe wurde ausdrücklich erwünscht. Calamares::JobThread Done Fertig Calamares::NamedJob Example job (%1) Beispielaufgabe (%1) 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 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". 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. Warten auf %n Modul(e). (%n second(s)) (%n Sekunde) (%n Sekunde(n)) System-requirements checking is complete. Die Überprüfung der Systemvoraussetzungen ist abgeschlossen. Calamares::ViewManager Setup Failed Setup fehlgeschlagen Installation Failed Installation gescheitert Would you like to paste the install log to the web? Möchten Sie das Installationsprotokoll an eine Internetadresse senden? 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. 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 CalamaresWindow %1 Setup Program %1 Installationsprogramm %1 Installer %1 Installationsprogramm 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'. Das Aktualisieren der Partitionstabelle auf Datenträger '%1' ist fehlgeschlagen. CheckerContainer Gathering system information... Sammle Systeminformationen... ChoicePage Form Form Select storage de&vice: Speichermedium auswählen Current: Aktuell: 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>. <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 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 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. 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. Config Set keyboard model to %1.<br/> Setze Tastaturmodell auf %1.<br/> Set keyboard layout to %1/%2. Setze Tastaturbelegung auf %1/%2. 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. Network Installation. (Disabled: Incorrect configuration) Netzwerk-Installation. (Deaktiviert: Ungültige Konfiguration) Network Installation. (Disabled: Received invalid groups data) Netzwerk-Installation. (Deaktiviert: Ungültige Gruppen-Daten eingegeben) 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ü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! 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. ContextualProcessJob Contextual Processes Job Job für kontextuale Prozesse CreatePartitionDialog Create a Partition Partition erstellen Si&ze: Grö&sse: MiB MiB Partition &Type: Partitions&typ: &Primary &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 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. 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'. 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) 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. CreateUserJob Create user %1 Erstelle Benutzer %1 Create user <strong>%1</strong>. Erstelle Benutzer <strong>%1</strong>. Preserving home directory Home-Verzeichnis wird beibehalten Creating user %1 Erstelle Benutzer %1 Configuring user %1 Konfiguriere Benutzer %1 Setting file permissions Setze Dateiberechtigungen CreateVolumeGroupDialog Create Volume Group Erstelle Volumengruppe 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. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editiere bestehende Partition Content: Inhalt: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Der Einhängepunkt wird schon benutzt. Bitte wählen Sie einen anderen. EncryptWidget Form Formular En&crypt system Verschlüssele System Passphrase Passwort Confirm passphrase Passwort wiederholen Please enter the same passphrase in both boxes. Bitte tragen Sie dasselbe Passwort in beide Felder ein. 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> 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>. Install boot loader on <strong>%1</strong>. Installiere Bootloader auf <strong>%1</strong>. Setting up mount points. Richte Einhängepunkte ein. 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 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. 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. HostInfoJob Collecting information about your machine. Sammeln von Informationen über Ihren Computer. 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. InitcpioJob Creating initramfs with mkinitcpio. Erstelle initramfs mit mkinitcpio. InitramfsJob Creating initramfs. Erstelle initramfs. 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Tastatur KeyboardViewStep Keyboard Tastatur 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 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. LicenseViewStep License Lizenz 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 LocalePage Region: Region: Zone: Zeitzone: &Change... &Ändern... LocaleQmlViewStep Location Standort LocaleTests Quit LocaleViewStep Location Standort 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. 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 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> 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. 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 too few digits Das Passwort hat zu wenige Stellen The password contains too few uppercase letters Das Passwort enthält zu wenige Großbuchstaben 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 too few non-alphanumeric characters Das Passwort enthält zu wenige nicht-alphanumerische Zeichen The password is too short Das Passwort ist zu kurz The password does not contain enough character classes Das Passwort enthält nicht genügend verschiedene Zeichenarten The password contains too many same characters consecutively Das Passwort enthält zu viele gleiche Zeichen 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 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 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. PackageChooserViewStep Packages Pakete PackageModel Name Name Description Beschreibung Page_Keyboard Form Formular Keyboard Model: Tastaturmodell: Type here to test your keyboard Tippen Sie hier, um die Tastaturbelegung zu testen Page_UserSetup Form Formular 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 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> 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 PartitionModel Free Space Freier Platz New partition Neue Partition Name Name File System Dateisystem File System Label Mount Point Einhängepunkt Size Grösse 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. PartitionViewStep Gathering system information... Sammle Systeminformationen... Partitions Partitionen Install %1 <strong>alongside</strong> another operating system. Installiere %1 <strong>neben</strong> einem anderen Betriebssystem. <strong>Erase</strong> disk and install %1. <strong>Lösche</strong> Festplatte und installiere %1. <strong>Replace</strong> a partition with %1. <strong>Ersetze</strong> eine Partition durch %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Eine EFI-Systempartition wird benötigt, um %1 zu starten.<br/><br/>Eine Partition mit dem Einhängepunkt <strong>%2</strong> wurde eingerichtet, jedoch wurde dort keine <strong>%3</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. EFI system partition flag not set Die Markierung als EFI-Systempartition wurde nicht gesetzt 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Eine GPT-Partitionstabelle ist die beste Option für alle Systeme. Dieses Installationsprogramm unterstützt ein solches Setup auch für BIOS-Systeme.<br/><br/>Um eine GPT-Partitionstabelle mit BIOS zu konfigurieren, gehen Sie (falls noch nicht geschehen) zurück und setzen Sie die Partitionstabelle auf GPT, als nächstes erstellen Sie eine 8 MB große, unformatierte Partition mit der Markierung <strong>bios_grub</strong> aktiviert.<br/><br/>Eine unformatierte 8 MB große Partition ist erforderlich, um %1 auf einem BIOS-System mit GPT zu starten. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Erscheinungsbild 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. ProcessResult There was no output from the command. Dieser Befehl hat keine Ausgabe erzeugt. Output: 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. QObject %1 (%2) %1 (%2) unknown unbekannt 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 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. 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. 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. ResizeVolumeGroupDialog Resize Volume Group Größe der Volumengruppe verändern 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. 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Zusammenfassung 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 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 Feedback zum Computer Configuring machine feedback. Konfiguriere Feedback zum Computer. Error in machine feedback configuration. Fehler bei der Konfiguration des Feedbacks zum Computer. Could not configure machine feedback correctly, script error %1. Feedback zum Computer konnte nicht korrekt konfiguriert werden, Skriptfehler %1. Could not configure machine feedback correctly, Calamares error %1. Feedback zum Computer konnte nicht korrekt konfiguriert werden, Calamares-Fehler %1. TrackingPage Form Formular Placeholder Platzhalter <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> 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 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 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 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 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 Users Benutzer UsersViewStep Users Benutzer 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: 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 &Known issues &Bekannte Probleme Open release notes website Webseite für Versionshinweise aufrufen &Release notes &Veröffentlichungshinweise <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. <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 WelcomeViewStep Welcome Willkommen 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/> 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> 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 Tastaturmodell Layouts Tastaturbelegungen Keyboard Layout Tastaturbelegung Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Klicken Sie auf Ihr bevorzugtes Tastaturmodell, um Belegung und Variante zu wählen oder wählen Sie das Standardmodell basierend auf der vorgefundenen Hardware. Models Modelle Variants Varianten Keyboard Variant Tastaturvariante Test your keyboard Testen Sie Ihre Tastatur localeq Change Ändern notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dies sind beispielhafte Veröffentlichungshinweise.</p> 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. 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. 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. 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 calamares-3.2.41.1/lang/calamares_el.ts000066400000000000000000006273061410275732300176130ustar00rootroot00000000000000 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. BootLoaderModel Master Boot Record of %1 Master Boot Record του %1 Boot Partition Κατάτμηση εκκίνησης System Partition Κατάτμηση συστήματος Do not install a boot loader Να μην εγκατασταθεί το πρόγραμμα εκκίνησης %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Κενή Σελίδα Calamares::DebugWindow Form Τύπος GlobalStorage GlobalStorage JobQueue 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 για την εργασία 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>. 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 Η εγκατάσταση απέτυχε Would you like to paste the install log to the web? 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. Θέλετε πραγματικά να ακυρώσετε τη διαδικασία εγκατάστασης; Το πρόγραμμα εγκατάστασης θα τερματιστεί και όλες οι αλλαγές θα χαθούν. CalamaresPython::Helper Unknown exception type Άγνωστος τύπος εξαίρεσης unparseable Python error Μη αναγνώσιμο σφάλμα Python unparseable Python traceback Μη αναγνώσιμη ανίχνευση Python Unfetchable Python error. Μη ανακτήσιµο σφάλμα Python. 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'. Η εγκατάσταση απέτυχε να αναβαθμίσει τον πίνακα κατατμήσεων στον δίσκο '%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. <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> όλα τα αρχεία στην επιλεγμένη συσκευή αποθήκευσης. <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 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %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 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. 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 %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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Δημιουργία κατάτμησης Si&ze: &Μέγεθος: MiB MiB Partition &Type: Τύ&πος κατάτμησης: &Primary Π&ρωτεύουσα 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. 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'. 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) 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. 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. 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]) 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 Επεξεργασία υπάρχουσας κατάτμησης Content: Περιεχόμενο: &Keep &Διατήρηση Format Μορφοποίηση Warning: Formatting the partition will erase all existing data. Προειδοποίηση: Η μορφοποίηση της κατάτμησης θα διαγράψει όλα τα δεδομένα. &Mount Point: Σ&ημείο προσάρτησης: Si&ze: &Μέγεθος: MiB MiB Fi&le System: &Σύστημα αρχείων: Flags: Σημαίες: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. EncryptWidget Form Τύπος En&crypt system Passphrase Λέξη Κλειδί Confirm passphrase Επιβεβαίωση λέξης κλειδί Please enter the same passphrase in both boxes. Παρακαλώ εισάγετε την ίδια λέξη κλειδί και στα δύο κουτιά. 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>. 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. 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 Το Konsole δεν είναι εγκατεστημένο 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 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</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. 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. 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 Home 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. 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). Εγκατάσταση του %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 δεν μπορεί να εγκατασταθεί σε άδειο χώρο. Παρακαλώ επίλεξε ένα υφιστάμενο διαμέρισμα. %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 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'. 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 Απαιτήσεις συστήματος 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 Τμηματοποίηση 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 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 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. Ο εγκαταστάτης απέτυχε να θέσει τις σημαίες στο διαμέρισμα %1. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. Αυτή είναι μια επισκόπηση του τι θα συμβεί μόλις ξεκινήσετε τη διαδικασία εγκατάστασης. SummaryViewStep Summary Σύνοψη 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 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 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 Καλώς ήλθατε 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_en.ts000066400000000000000000006705771410275732300176250ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Blank Page Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Modules Type: Type: none none Interface: Interface: 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 Calamares::ExecutionViewStep Set up Set up Install Install Calamares::FailJob Job failed (%1) Job failed (%1) Programmed job failure was explicitly requested. Programmed job failure was explicitly requested. Calamares::JobThread Done Done Calamares::NamedJob Example job (%1) Example job (%1) 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 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". 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). Waiting for %n module(s). (%n second(s)) (%n second(s)) (%n second(s)) System-requirements checking is complete. System-requirements checking is complete. Calamares::ViewManager Setup Failed Setup Failed Installation Failed Installation Failed Would you like to paste the install log to the web? Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Setup Program %1 Installer %1 Installer ChangeFilesystemLabelJob 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... ChoicePage Form Form Select storage de&vice: Select storage de&vice: Current: Current: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition Si&ze: Si&ze: MiB MiB Partition &Type: Partition &Type: &Primary &Primary 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. 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'. 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) 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. CreateUserJob Create user %1 Create user %1 Create user <strong>%1</strong>. Create user <strong>%1</strong>. Preserving home directory Preserving home directory Creating user %1 Creating user %1 Configuring user %1 Configuring user %1 Setting file permissions Setting file permissions CreateVolumeGroupDialog Create Volume Group Create Volume Group 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Edit Existing Partition Content: Content: &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: Label for the filesystem Label for the filesystem FS Label: FS Label: Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system En&crypt system Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. 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> 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>. Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. Setting up mount points. 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. FinishedQmlViewStep Finish Finish FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Collecting information about your machine. 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>. InitcpioJob Creating initramfs with mkinitcpio. Creating initramfs with mkinitcpio. InitramfsJob Creating initramfs. Creating initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Keyboard KeyboardViewStep Keyboard Keyboard 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 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. LicenseViewStep License 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 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. LocalePage Region: Region: Zone: Zone: &Change... &Change... LocaleQmlViewStep Location Location LocaleTests Quit Quit LocaleViewStep Location Location 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. 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 NotesQmlViewStep Notes 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>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> 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 too few digits The password contains too few digits The password contains too few uppercase letters The password contains too few uppercase 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 too few non-alphanumeric characters The password contains too few non-alphanumeric characters The password is too short The password is too short The password does not contain enough character classes The password does not contain enough character classes The password contains too many same characters consecutively The password contains too many same characters 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 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 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. PackageChooserViewStep Packages Packages PackageModel Name Name Description Description Page_Keyboard Form Form Keyboard Model: Keyboard Model: Type here to test your keyboard Type here to test your keyboard Page_UserSetup Form Form 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set EFI system partition flag not set 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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. ProcessResult There was no output from the command. There was no output from the command. Output: 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. QObject %1 (%2) %1 (%2) unknown unknown 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 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'. 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 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'. ResizeVolumeGroupDialog Resize Volume Group Resize Volume Group 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'. 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Summary 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. 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. TrackingPage Form Form Placeholder 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>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> 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 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 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 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 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 Users Users UsersViewStep Users Users 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: 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 &Known issues &Known issues Open release notes website Open release notes website &Release notes &Release notes <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-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 WelcomeViewStep Welcome Welcome 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/> 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 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> 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 keyboardq Keyboard Model Keyboard Model Layouts Layouts Keyboard Layout Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Models Variants Variants Keyboard Variant Keyboard Variant Test your keyboard Test your keyboard localeq Change Change notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_en_GB.ts000066400000000000000000006223371410275732300201640ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Blank Page Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Modules Type: Type: none none 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 Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Debug information Calamares::ExecutionViewStep Set up Install Install Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Done Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Running command %1 %2 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". 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 Installation Failed Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Installer %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'. The installer failed to update partition table on disk '%1'. CheckerContainer Gathering system information... Gathering system information... ChoicePage Form Form Select storage de&vice: Select storage de&vice: Current: Current: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Contextual Processes Job CreatePartitionDialog Create a Partition Create a Partition Si&ze: Si&ze: MiB MiB Partition &Type: Partition &Type: &Primary &Primary 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. 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'. 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) 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. CreateUserJob Create user %1 Create user %1 Create user <strong>%1</strong>. 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 %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. DeviceInfoWidget 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]) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Edit Existing Partition Content: Content: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system En&crypt system Passphrase Passphrase Confirm passphrase Confirm passphrase Please enter the same passphrase in both boxes. Please enter the same passphrase in both boxes. 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> 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>. Install boot loader on <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Setting up mount points. Setting up mount points. 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. FinishedQmlViewStep Finish Finish FinishedViewStep 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'. 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. 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 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Keyboard KeyboardViewStep Keyboard Keyboard 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 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. LicenseViewStep License License 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. LocalePage Region: Region: Zone: Zone: &Change... &Change... LocaleQmlViewStep Location Location LocaleTests Quit LocaleViewStep Location 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. 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 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 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 too few digits The password contains too few digits The password contains too few uppercase letters 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 lowercase letters The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters The password is too short The password is too short The password does not contain enough character classes The password does not contain enough character classes The password contains too many same characters consecutively The password contains too many same characters 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 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 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. PackageChooserViewStep Packages PackageModel Name Name Description Description Page_Keyboard Form Form Keyboard Model: Keyboard Model: Type here to test your keyboard Type here to test your keyboard Page_UserSetup Form Form 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 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> 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 PartitionModel Free Space Free Space New partition New partition Name Name File System File System File System Label Mount Point Mount Point Size Size 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. 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. <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set EFI system partition flag not set 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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. ProcessResult There was no output from the command. There was no output from the command. Output: 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. QObject %1 (%2) %1 (%2) unknown unknown 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 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 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 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'. 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: 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Summary 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. 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. TrackingPage Form Form Placeholder 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> <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 Feedback 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 Users UsersViewStep Users Users 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: 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 &Known issues &Known issues Open release notes website &Release notes &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 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. WelcomeQmlViewStep Welcome Welcome WelcomeViewStep Welcome Welcome 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_eo.ts000066400000000000000000005665151410275732300176220ustar00rootroot00000000000000 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) Calamares::BlankViewStep Blank Page Senskriba Paĝo Calamares::DebugWindow Form Formularo GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduloj Type: Tipo: none neniu Interface: Interfaco: 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 Instalu Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Finita 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 Would you like to paste the install log to the web? 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. CalamaresPython::Helper Unknown exception type unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer %1 Instalilo 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 Formularo Select storage de&vice: Elektita &tenada aparato Current: Nune: After: Poste: <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: 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. <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 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. 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 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiu Subdiskon Si&ze: &Grandeco: MiB MiB Partition &Type: &Speco de Subdisko: &Primary &Ĉefsubdisko 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. 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 Content: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Muntopunkto jam utiliĝi. Bonvolu elektu alian. EncryptWidget Form Formularo En&crypt system &Ĉifru la sistemo Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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 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. 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 &Nuligi &OK &Daŭrigu 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. 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... &Ŝanĝu... 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. 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 NotesQmlViewStep Notes 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> 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 Formularo Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Description Page_Keyboard Form Formularo Keyboard Model: Type here to test your keyboard Page_UserSetup Form Formularo 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 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. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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: 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. 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 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 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 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 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 Formularo 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 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 MiB Total Size: Used Size: Total Sectors: Quantity of LVs: 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 &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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_es.ts000066400000000000000000006411611410275732300176150ustar00rootroot00000000000000 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 tienen soporte para <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. 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. 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. 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) Calamares::BlankViewStep Blank Page Página vacía Calamares::DebugWindow Form Formulario GlobalStorage Almacenamiento Global JobQueue Lista de trabajos pendientes Modules Módulos Type: Tipo: none ninguno Interface: Interfaz: 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. Sube el log de la sesión hacia el pastebin configurado. Send Session Log Envía el Log de la Sesión. Reload Stylesheet Recargar Hoja de estilo Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Información de depuración. Calamares::ExecutionViewStep Set up Instalar Install Instalar Calamares::FailJob Job failed (%1) Trabajo fallido (%1) Programmed job failure was explicitly requested. Se solicitó de manera explícita la falla del trabajo programado. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Ejemplo de trabajo (%1) Calamares::ProcessJob Run command '%1' in target system. Ejecutar el comando '%1' en el sistema de destino. Run command '%1'. Ejecutar el comando '%1'. Running command %1 %2 Ejecutando comando %1 %2 Calamares::PythonJob Running %1 operation. Ejecutando %1 operación. Bad working directory path Error en la ruta del directorio de trabajo 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". Calamares::QmlViewStep Loading ... Cargando ... QML Step <i>%1</i>. Paso QML <i>%1</i>. Loading failed. La carga ha fallado. Calamares::RequirementsChecker Requirements checking for module <i>%1</i> is complete. Waiting for %n module(s). Esperando %n módulo (s). Esperando %n módulo(s). (%n second(s)) System-requirements checking is complete. La verificación de los requisitos del sistema está completa. Calamares::ViewManager Setup Failed Configuración Fallida Installation Failed Error en la Instalación Would you like to paste the install log to the web? ¿Desea pegar el registro de instalación en la web? Error Error &Yes &Sí &No &No &Close &Cerrar Install Log Paste URL Pegar URL Registro de Instalación The upload was unsuccessful. No web-paste was done. La carga no tuvo éxito. No se realizó pegado web. Install log posted to %1 Link copied to clipboard 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 setup? ¿Continuar con la configuració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 programa de instalación %1 está a punto de hacer cambios en el disco con el fin de configurar %2.<br/><strong>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 &Instalar &Install &Instalar Setup is complete. Close the setup program. La instalación se ha completado. Cierre el instalador. The installation is complete. Close the installer. La instalación se ha completado. Cierre el instalador. Cancel setup without changing the system. Cancelar instalació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 instalació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. 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. CalamaresPython::Helper Unknown exception type Excepción desconocida unparseable Python error error unparseable Python unparseable Python traceback rastreo de Python unparseable Unfetchable Python error. Error de Python Unfetchable. CalamaresWindow %1 Setup Program %1 Installer %1 Instalador 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'. El instalador falló al actualizar la tabla de particiones del disco '%1'. CheckerContainer Gathering system information... Obteniendo información del sistema... ChoicePage Form Formulario Select storage de&vice: Seleccionar dispositivo de almacenamiento: Current: Actual: After: Despues: <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. <strong>Particionado manual </strong><br/> Usted puede crear o cambiar el tamaño de las particiones usted mismo. 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. Boot loader location: Ubicación del cargador de arranque: <strong>Select a partition to install on</strong> <strong>Seleccione una partición para instalar en</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. 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. 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. <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>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>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Reemplazar una partición</strong><br/>Reemplazar 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. %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. 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. 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. 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 Swap Swap (no Hibernate) Swap (sin hibernación) Swap (with Hibernate) Swap (con hibernación) Swap to file Swap a archivo ClearMountsJob Clear mounts for partitioning operations on %1 Limpiar puntos de montaje para operaciones de particionamiento en %1 Clearing mounts for partitioning operations on %1. Limpiando puntos de montaje para operaciones de particionamiento en %1. Cleared all mounts for %1 Limpiados todos los puntos de montaje para %1 ClearTempMountsJob Clear all temporary mounts. Limpiar 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. CommandList Could not run command. No se pudo ejecutar el comando. 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 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. Config 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. Set timezone to %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. 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) Network Installation. (Disabled: No package list) 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) 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>Welcome to the %1 installer</h1> Your username is too long. Su 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 del Host es demasiado corto. Your hostname is too long. El nombre del Host es demasiado largo. '%1' is not allowed as hostname. Only letters, numbers, underscore and hyphen are allowed. Your passwords do not match! ¡Sus contraseñas no coinciden! OK! Setup Failed Configuración Fallida Installation Failed Error en la Instalación The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. 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. Package Selection Selección de paquetes Please pick a product from the list. The selected product will be installed. ContextualProcessJob Contextual Processes Job Tarea Contextual Processes CreatePartitionDialog Create a Partition Crear partición Si&ze: &Tamaño: 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) &Mount Point: Punto de &montaje: Flags: Banderas: Label for the filesystem FS Label: 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. 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 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'. 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) Registro de arranque principal (MBR) GUID Partition Table (GPT) Tabla de Particiones GUID (GPT) CreatePartitionTableJob Create new %1 partition table on %2. Crear nueva %1 tabla de particiones 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). Creating new %1 partition table on %2. Creando nueva %1 tabla de particiones en %2. The installer failed to create a partition table on %1. El instalador fallo al crear la tabla de partición en %1. CreateUserJob Create user %1 Crear usuario %1 Create user <strong>%1</strong>. Crear usuario <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Crear grupo de volúmenes CreateVolumeGroupJob Create new volume group named %1. Crear un nuevo grupo de volúmenes llamado %1. Create new volume group named <strong>%1</strong>. Crear un nuevo grupo de volúmenes llamado <strong>%1</strong>. Creating new volume group named %1. Creando un nuevo grupo de volúmenes llamado %1. The installer failed to create a volume group named '%1'. El instalador falló en crear un grupo de volúmenes llamado '%1'. DeactivateVolumeGroupJob Deactivate volume group named %1. Desactivar grupo de volúmenes llamado %1. Deactivate volume group named <strong>%1</strong>. Desactivar grupo de volúmenes llamado <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. 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. El instalador falló al eliminar la partición %1. DeviceInfoWidget 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>. 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) 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 Failed to open %1 No se pudo abrir %1 DummyCppJob Dummy C++ Job Tarea C++ ficticia EditExistingPartitionDialog Edit Existing Partition Editar Partición Existente Content: Contenido: &Keep &Mantener Format Formato Warning: Formatting the partition will erase all existing data. Advertencia: Formatear la partición borrará todos los datos existentes. &Mount Point: Punto de &montaje: Si&ze: &Tamaño: MiB MiB Fi&le System: S&istema de archivo: Flags: Banderas: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Punto de montaje ya en uso. Por favor, seleccione otro. EncryptWidget Form Formulario En&crypt system &Cifrar sistema Passphrase Frase-contraseña Confirm passphrase Confirmar frase-contraseña Please enter the same passphrase in both boxes. Por favor, introduzca la misma frase-contraseña en ambos recuadros. 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> Install %1 on <strong>new</strong> %2 system partition. Instalar %1 en <strong>nuevo</strong> %2 partición del sistema. 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>. Install boot loader on <strong>%1</strong>. Instalar gestor de arranque en <strong>%1</strong>. Setting up mount points. Configurando puntos de montaje. 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. <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>Listo.</h1><br/>%1 ha sido instalado en su equipo.<br/>Ahora puede reiniciar hacia su nuevo sistema, o continuar utilizando %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>La instalación falló</h1><br/>%1 no se ha instalado en su equipo.<br/>El mensaje de error fue: %2. FinishedQmlViewStep Finish Finalizar FinishedViewStep Finish Finalizar 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 ficheros %2. The installer failed to format partition %1 on disk '%2'. El instalador falló al formatear la partición %1 del disco '%2'. GeneralRequirements has at least %1 GiB available drive space 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. 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 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. El instalador no esta ejecutándose con permisos de administrador. The installer is not running with administrator rights. El instalador no esta ejecutándose con permisos de administrador. has a screen large enough to show the whole installer 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. 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. Creando initramfs con mkinitcpio. InitramfsJob Creating initramfs. Creando initramfs. InteractiveTerminalPage Konsole not installed Konsole no está instalada Please install KDE Konsole and try again! ¡Por favor, instale KDE Konsole e inténtelo de nuevo! Executing script: &nbsp;<code>%1</code> Ejecutando script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclado KeyboardViewStep Keyboard Teclado 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>. &Cancel &Cancelar &OK &Aceptar 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). 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 Licencia 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/>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 driver gráficos</strong><br/><font color="Grey">por %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>%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 paquete</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 Ocultar licencia Show the license text Ver licencia Open license agreement in browser. LocalePage Region: Región: Zone: Zona: &Change... &Cambiar... LocaleQmlViewStep Location Ubicación LocaleTests Quit LocaleViewStep Location Ubicación LuksBootKeyFileJob Configuring LUKS key file. No partitions are defined. No hay particiones definidas. 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 identificación-de-máquina. Configuration Error Error de configuración 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 paquetes Office software Programas de oficina Office package Paquete de oficina Browser software Browser package Web browser Kernel Kernel Services Servicios Login Desktop Applications Aplicaciónes Communication Development Office Oficina Multimedia Multimedia Internet Internet Theming Temas Gaming Juegos Utilities Utilidades 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 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' 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 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 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 The password contains forbidden words in some form La contraseña contiene palabras prohibidas de alguna forma The password contains too few digits La contraseña contiene demasiado pocos dígitos The password contains too few uppercase letters La contraseña contiene demasiado pocas letras mayúsculas The password contains fewer than %n lowercase letters The password contains too few lowercase letters La contraseña contiene demasiado pocas letras minúsculas The password contains too few non-alphanumeric characters La contraseña contiene demasiado pocos caracteres alfanuméricos The password is too short La contraseña es demasiado corta The password does not contain enough character classes La contraseña no contiene suficientes clases de caracteres The password contains too many same characters consecutively La contraseña contiene demasiados caracteres iguales consecutivamente The password contains too many characters of the same class consecutively La contraseña contiene demasiados caracteres de la misma clase consecutivamente 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 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 Setting is not of string type La configuración no es de tipo 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 Fatal failure Fallo fatal Unknown error Error desconocido Password is empty La contraseña vacia PackageChooserPage Form Formulario Product Name Nombre del producto TextLabel Etiqueta de texto 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. PackageChooserViewStep Packages Paquetes PackageModel Name Nombre Description Descripción Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado: Type here to test your keyboard Escriba aquí para comprobar su teclado Page_UserSetup Form Formulario What is your name? Nombre Your Full Name Su nombre completo What name do you want to use to log in? ¿Qué nombre desea usar para ingresar? login What is the name of this computer? Nombre del equipo <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 Nombre de computadora Choose a password to keep your account safe. Elija una contraseña para mantener su cuenta 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>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> Password Contraseña Repeat Password Repita la contraseña When this box is checked, password-strength checking is done and you will not be able to use a weak password. Require strong passwords. Requerir contraseñas seguras Log in automatically without asking for the password. Conectarse automaticamente sin pedir 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>Escriba dos veces la contraseña para que se puede verificar en caso de errores al escribir.</small> PartitionLabelsView Root Root Home Inicio Boot Boot EFI system Sistema EFI Swap Swap New partition for %1 Nueva partición de %1 New partition Partición nueva %1 %2 size[number] filesystem[name] %1 %2 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 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 I&nstall boot loader on: Instalar 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? Can not create new partition No se puede 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. PartitionViewStep Gathering system information... Obteniendo información del sistema... Partitions Particiones Install %1 <strong>alongside</strong> another operating system. Instalar %1 <strong>junto a</strong> otro sistema operativo. <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una partición con %1. <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 After: Despúes: 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Bandera EFI no establecida en la partición del sistema 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. Boot partition not encrypted Partición de arranque no 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. 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. There are no partitions to install on. PlasmaLnfJob Plasma Look-and-Feel Job Tarea Plasma Look-and-Feel Could not select KDE Plasma Look-and-Feel package No se pudo seleccionar el paquete Plasma Look-and-Feel de KDE 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. 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. PlasmaLnfViewStep Look-and-Feel Apariencia PreserveFiles Saving files for later ... Guardando archivos para después ... No files configured to save for later. No hay archivos configurados para guardarlos para después. Not all of the configured files could be preserved. No todos los archivos de configuración se pudieron preservar. ProcessResult There was no output from the command. No hubo salida del comando. Output: Salida: External command crashed. El comando externo falló. Command <i>%1</i> crashed. El comando <i>%1</i> falló. External command failed to start. El comando externo no se pudo iniciar. Command <i>%1</i> failed to start. El comando <i>%1</i> no se pudo iniciar. Internal error when starting command. Error interno al iniciar el comando. Bad parameters for process job call. Parámetros erróneos para la llamada de la tarea del procreso. External command failed to finish. El comando externo no se pudo finalizar. Command <i>%1</i> failed to finish in %2 seconds. El comando <i>%1</i> no se pudo finalizar en %2 segundos. External command finished with errors. El comando externo finalizó con errores. Command <i>%1</i> finished with exit code %2. El comando <i>%1</i> finalizó con un código de salida %2. QObject %1 (%2) %1 (%2) unknown desconocido extended extendido unformatted sin formato 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) (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> RemoveUserJob Remove live user from target system Borre el usuario "en vivo" del sistema objetivo RemoveVolumeGroupJob Remove Volume Group named %1. Remover grupo de volúmenes llamado %1. Remove Volume Group named <strong>%1</strong>. Remover grupo de volúmenes llamado <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». 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>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 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. 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 a la hora de reducir la partición %1 en el disco '%2'. ResizeVolumeGroupDialog Resize Volume Group Cambiar el tamaño del grupo de volúmenes 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>. The installer failed to resize a volume group named '%1'. El instalador no pudo redimensionar el grupo de volúmenes denominado «%1». ResultsListDialog For best results, please ensure that this computer: Para obtener los mejores resultados, por favor asegúrese que este ordenador: 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 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 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. SetPartFlagsJob Set flags on partition %1. Establecer indicadores en la partición %1. Set flags on %1MiB %2 partition. 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. 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>. 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. 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. 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. 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 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. 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 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. Esto es una previsualización de que ocurrirá una vez que empiece la instalación. SummaryViewStep Summary Resumen 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. 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 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. TrackingPage Form Formulario Placeholder Indicador de posición <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;">Pulse aquí para más información acerca de la respuesta del usuario</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 Respuesta 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 Usuarios UsersViewStep Users Usuarios VariantModel Key Column header for key/value 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: WelcomePage Form Formulario Select application and system language &About &Acerca de Open donations website &Donate Open help and support website &Support &Ayuda Open issues and bug-tracking website &Known issues &Problemas conocidos Open release notes website &Release notes &Notas de publicación <h1>Welcome to the Calamares setup program for %1.</h1> <h1>Welcome to %1 setup.</h1> <h1>Bienvenido al instalador %1.</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> %1 support %1 ayuda 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. WelcomeQmlViewStep Welcome Bienvenido WelcomeViewStep Welcome Bienvenido 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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? Nombre Your Full Name Su nombre completo What name do you want to use to log in? ¿Qué nombre desea usar para ingresar? 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? Nombre del equipo Computer Name Nombre de computadora 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. Elija una contraseña para mantener su cuenta segura. Password Contraseña Repeat Password Repita 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. 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 calamares-3.2.41.1/lang/calamares_es_MX.ts000066400000000000000000006357551410275732300202350ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Página en blanco Calamares::DebugWindow Form Formulario GlobalStorage Almacenamiento Global JobQueue Cola de trabajo Modules Módulos Type: Tipo: none ninguno Interface: Interfaz: 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 Calamares::ExecutionViewStep Set up Preparar Install Instalar Calamares::FailJob Job failed (%1) Trabajo fallido (%1) Programmed job failure was explicitly requested. Falla del trabajo programado fue solicitado explícitamente. Calamares::JobThread Done Hecho Calamares::NamedJob Example job (%1) Trabajo de ejemplo. (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Ejecutando comando %1 %2 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". 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. Chequeo de requerimientos del sistema completado. Calamares::ViewManager Setup Failed Fallo en la configuración. Installation Failed Instalación Fallida Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Programa de instalación %1 Installer %1 Instalador 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'. El instalador falló al actualizar la tabla de partición en el disco '%1'. CheckerContainer Gathering system information... Obteniendo información del sistema... ChoicePage Form Formulario Select storage de&vice: Seleccionar dispositivo de almacenamiento: Current: Actual: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Tareas de procesos contextuales CreatePartitionDialog Create a Partition Crear una Partición Si&ze: Ta&maño: 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. &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. 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'. 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) 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. CreateUserJob Create user %1 Crear usuario %1 Create user <strong>%1</strong>. Crear usuario <strong>%1</strong>. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Crear Grupo de Volumen 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'. DeactivateVolumeGroupJob Deactivate volume group named %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>. The installer failed to deactivate a volume group named %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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Trabajo C++ Simulado EditExistingPartitionDialog Edit Existing Partition Editar Partición Existente Content: Contenido: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Punto de montaje ya esta en uso. Por favor seleccione otro. EncryptWidget Form Formulario En&crypt system En&criptar sistema 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalar el cargador de arranque en <strong>%1</strong>. Setting up mount points. Configurando puntos de montaje. 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. <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. FinishedQmlViewStep Finish Terminado FinishedViewStep 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' 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 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 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclado KeyboardViewStep Keyboard Teclado 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 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. LicenseViewStep License Licencia 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. LocalePage Region: Región: Zone: Zona: &Change... &Cambiar... LocaleQmlViewStep Location Ubicación LocaleTests Quit LocaleViewStep Location Ubicación 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. Generar identificación de la maquina. Configuration Error Error de configuración 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 paquete 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 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 too few digits La contraseña contiene muy pocos dígitos The password contains too few uppercase letters La contraseña contiene muy pocas letras mayú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 too few non-alphanumeric characters La contraseña contiene muy pocos caracteres alfanuméricos The password is too short La contraseña es muy corta The password does not contain enough character classes La contraseña no contiene suficientes tipos de caracteres The password contains too many same characters consecutively La contraseña contiene muchos caracteres iguales repetidos 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 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 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 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. PackageChooserViewStep Packages PackageModel Name Nombre Description Descripción Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado: Type here to test your keyboard Teclee aquí para probar su teclado Page_UserSetup Form Formulario 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Borrar</strong> el disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Reemplazar</strong> una parición con %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Indicador de partición del sistema EFI no configurado 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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. ProcessResult There was no output from the command. No hubo salida desde el comando. Output: 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. QObject %1 (%2) %1 (%2) unknown desconocido 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 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 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 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'. 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: 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 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 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. SetPartFlagsJob Set flags on partition %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. 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. 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 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Resumen 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. 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. Could not configure machine feedback correctly, 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>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> 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 Retroalimentación 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 Users Usuarios UsersViewStep Users Usuarios 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: 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 &Known issues &Problemas Conocidos Open release notes website &Release notes &Notas de lanzamiento <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. WelcomeQmlViewStep Welcome Bienvenido WelcomeViewStep Welcome Bienvenido 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_es_PE.ts000066400000000000000000005573121410275732300202050ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_es_PR.ts000066400000000000000000005603051410275732300202160ustar00rootroot00000000000000 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 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) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Formulario GlobalStorage AlmacenamientoGlobal JobQueue ColadeTrabajos Modules Módulos 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 Información de depuración Calamares::ExecutionViewStep Set up Install Instalar Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Hecho 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 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". 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 Falló la instalación Would you like to paste the install log to the web? 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. 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 Formulario 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 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. 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 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form Formulario En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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 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 Teclado KeyboardViewStep Keyboard Teclado 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 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. 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 Ubicación LocaleTests Quit LocaleViewStep Location Ubicación 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 Formulario Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Description Page_Keyboard Form Formulario Keyboard Model: Type here to test your keyboard Page_UserSetup Form Formulario 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 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. PartitionViewStep Gathering system information... Partitions Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. 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. 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. 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 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 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 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 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) SummaryPage 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. SummaryViewStep Summary Resumen 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 Formulario 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 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 Formulario 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_et.ts000066400000000000000000006261041410275732300176160ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Tühi leht Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Moodulid Type: Tüüp: none puudub Interface: Liides: 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 Calamares::ExecutionViewStep Set up Install Paigalda Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Valmis Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Käivitan käsklust %1 %2 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". 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 Paigaldamine ebaõnnestus Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Installer %1 paigaldaja 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... Hangin süsteemiteavet... ChoicePage Form Form Select storage de&vice: Vali mäluseade: Current: Hetkel: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Kontekstipõhiste protsesside töö CreatePartitionDialog Create a Partition Loo sektsioon Si&ze: Suurus: MiB MiB Partition &Type: Partitsiooni tüüp: &Primary %Peamine 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. 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". 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) 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. CreateUserJob Create user %1 Loo kasutaja %1 Create user <strong>%1</strong>. Loo kasutaja <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. 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". 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". 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Testiv C++ töö EditExistingPartitionDialog Edit Existing Partition Muuda olemasolevat partitsiooni Content: Sisu: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Monteerimispunkt on juba kasutusel. Palun vali mõni teine. EncryptWidget Form Form En&crypt system Krüpti süsteem Passphrase Salaväljend Confirm passphrase Kinnita salaväljendit Please enter the same passphrase in both boxes. Palun sisesta sama salaväljend mõlemisse kasti. 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> 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>. Install boot loader on <strong>%1</strong>. Paigalda käivituslaadur kohta <strong>%1</strong>. Setting up mount points. Seadistan monteerimispunkte. 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. FinishedQmlViewStep Finish Valmis FinishedViewStep 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". 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. 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 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Klaviatuur KeyboardViewStep Keyboard Klaviatuur 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 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. LicenseViewStep License Litsents 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. LocalePage Region: Regioon: Zone: Tsoon: &Change... &Muuda... LocaleQmlViewStep Location Asukoht LocaleTests Quit LocaleViewStep Location Asukoht 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. 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 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 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 too few digits Parool sisaldab liiga vähe numbreid The password contains too few uppercase letters Parool sisaldab liiga vähe suurtähti 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 too few non-alphanumeric characters Parool sisaldab liiga vähe mitte-tähestikulisi märke The password is too short Parool on liiga lühike The password does not contain enough character classes Parool ei sisalda piisavalt tähemärgiklasse The password contains too many same characters consecutively Parool sisaldab järjest liiga palju sama 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 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 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. PackageChooserViewStep Packages PackageModel Name Nimi Description Kirjeldus Page_Keyboard Form Form Keyboard Model: Klaviatuurimudel: Type here to test your keyboard Kirjuta siia, et testida oma klaviatuuri Page_UserSetup Form Form 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 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> 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 PartitionModel Free Space Tühi ruum New partition Uus partitsioon Name Nimi File System Failisüsteem File System Label Mount Point Monteerimispunkt Size Suurus 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. 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> <strong>Erase</strong> disk and install %1. <strong>Tühjenda</strong> ketas ja paigalda %1. <strong>Replace</strong> a partition with %1. <strong>Asenda</strong> partitsioon operatsioonisüsteemiga %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set EFI süsteemipartitsiooni silt pole määratud 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Välimus-ja-tunnetus 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. ProcessResult There was no output from the command. Käsul polnud väljundit. Output: 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. QObject %1 (%2) %1 (%2) unknown tundmatu 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 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". 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. 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". ResizeVolumeGroupDialog Resize Volume Group Muuda kettagrupi suurust 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. 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 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 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. 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. 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. 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. 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öö SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Kokkuvõte 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. 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. TrackingPage Form Form Placeholder Kohatäitja <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> 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 Tagasiside 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 Kasutajad UsersViewStep Users Kasutajad 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: 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 &Known issues &Teadaolevad vead Open release notes website &Release notes &Väljalaskemärkmed <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. WelcomeQmlViewStep Welcome Tervist WelcomeViewStep Welcome Tervist 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_eu.ts000066400000000000000000006056151410275732300176230ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Orri zuria Calamares::DebugWindow Form Formulario GlobalStorage Biltegiratze globala JobQueue LanIlara Modules Moduluak Type: Mota: none Ezer ez Interface: Interfasea: 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 Calamares::ExecutionViewStep Set up Install Instalatu Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Egina Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 %1 %2 komandoa exekutatzen 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. 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). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Instalazioak huts egin du Would you like to paste the install log to the web? 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 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. CalamaresPython::Helper Unknown exception type Salbuespen-mota ezezaguna unparseable Python error unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer %1 Instalatzailea 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... Sistemaren informazioa eskuratzen... ChoicePage Form Formulario Select storage de&vice: Aukeratu &biltegiratze-gailua: Current: Unekoa: 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">ezabatuko</font> ditu biltegiratze-gailutik. <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 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 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. 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. Config 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Sortu partizio bat Si&ze: &Tamaina: MiB MiB Partition &Type: PartizioMo&ta: &Primary &Primarioa 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. 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. 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) 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. CreateUserJob Create user %1 Sortu %1 erabiltzailea Create user <strong>%1</strong>. Sortu <strong>%1</strong> erabiltzailea Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group 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. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++ lana EditExistingPartitionDialog Edit Existing Partition Editatu badagoen partizioa Content: Edukia: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Muntatze-puntua erabiltzen. Mesedez aukeratu beste bat. EncryptWidget Form Formulario En&crypt system Sistema en%kriptatua Passphrase Pasahitza Confirm passphrase Berretsi pasahitza Please enter the same passphrase in both boxes. Mesedez sartu pasahitz berdina bi kutxatan. 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> 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>. Instalatu abio kargatzailea <strong>%1</strong>-(e)n. Setting up mount points. Muntatze puntuak ezartzen. 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. FinishedQmlViewStep Finish Bukatu FinishedViewStep 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. 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. 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 ez dago instalatuta Please install KDE Konsole and try again! Mesedez instalatu KDE kontsola eta saiatu berriz! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teklatua KeyboardViewStep Keyboard Teklatua 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 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. LicenseViewStep License Lizentzia 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: Eskualdea: Zone: Zonaldea: &Change... &Aldatu... LocaleQmlViewStep Location Kokapena LocaleTests Quit LocaleViewStep Location Kokapena 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. 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 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 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 too few digits Pasahitzak zenbaki gutxiegi ditu The password contains too few uppercase letters Pasahitzak maiuskula gutxiegi ditu The password contains fewer than %n lowercase letters The password contains too few lowercase letters Pasahitzak minuskula gutxiegi ditu The password contains too few non-alphanumeric characters Pasahitzak alfabetokoak ez diren karaktere gutxiegi ditu The password is too short Pasahitza motzegia da 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 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 PackageChooserPage Form Formulario Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Izena Description Deskribapena Page_Keyboard Form Formulario Keyboard Model: Teklatu Modeloa: Type here to test your keyboard Idatzi hemen zure teklatua frogatzeko Page_UserSetup Form Formulario 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 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> 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 PartitionModel Free Space Espazio librea New partition Partizio berria Name Izena File System Fitxategi Sistema File System Label Mount Point Muntatze Puntua Size Tamaina 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. PartitionViewStep Gathering system information... Sistemaren informazioa eskuratzen... Partitions Partizioak Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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: 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. PlasmaLnfViewStep Look-and-Feel PreserveFiles Saving files for later ... Fitxategiak geroko gordetzen... 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: 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. QObject %1 (%2) %1 (%2) unknown Ezezaguna 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 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 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 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'. ResizeVolumeGroupDialog Resize Volume Group Bolumen Talde berriaren tamaina aldatu 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: 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 SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Barne errorea 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 Ezin izan da %1 partizioan idatzi 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 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary Laburpena 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 Formulario 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 Feedback 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 Erabiltzaileak UsersViewStep Users Erabiltzaileak 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: 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 &Known issues &Arazo ezagunak 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. WelcomeQmlViewStep Welcome Ongi etorri WelcomeViewStep Welcome Ongi etorri 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 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> 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 Teklatu modeloa Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard Frogatu zure teklatua localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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> <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 calamares-3.2.41.1/lang/calamares_fa.ts000066400000000000000000006657101410275732300176020ustar00rootroot00000000000000 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: رابط: 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 برای کار پایتونی %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 Setup Failed راه‌اندازی شکست خورد. Installation Failed نصب شکست خورد Would you like to paste the install log to the web? آیا مایلید که گزارش‌ها در وب الصاق شوند؟ 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 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 &اکنون نصب شود 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 برنامه راه‌اندازی %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. استفاده مجدد از %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>. <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/> 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 (no Hibernate) مبادله (بدون خواب‌زمستانی) Swap (with Hibernate) مبادله (با خواب‌زمستانی) Swap to file مبادله به پرونده ClearMountsJob 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 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. محلی و اعداد و تاریخ ها روی٪ 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. 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. لطفاً محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition ایجاد یک افراز Si&ze: اندا&زه: MiB می‌ب Partition &Type: &گونهٔ افراز &Primary &اصلی 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. نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. 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. ایچاد افراز %2می‌ب جدید روی %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>%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'. 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. CreateUserJob Create user %1 ایجاد کاربر %1 Create user <strong>%1</strong>. ایجاد کاربر <strong>%</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. ایجاد گروه حجمی جدید به نام %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'. 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. DeletePartitionJob Delete partition %1. حذف افراز %1. Delete partition <strong>%1</strong>. حذف افراز <strong>%1</strong>. Deleting partition %1. در حال حذف افراز %1. The installer failed to delete partition %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. این یک دستگاه حلقه ای است. این یک دستگاه شبه بدون جدول پارتیشن است که یک فایل را به عنوان یک دستگاه بلوک قابل دسترسی می کند. این نوع تنظیمات معمولاً فقط شامل یک سیستم فایل منفرد است. 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 Failed to open %1 شکست در گشودن %1 DummyCppJob Dummy C++ Job کار سی‌پلاس‌پلاس الکی EditExistingPartitionDialog Edit Existing Partition ویرایش افراز موجود Content: محتوا: &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: Mountpoint already in use. Please select another one. نقطهٔ اتّصال از پیش در حال استفاده است. لطفاً نقطهٔ دیگری برگزینید. EncryptWidget Form فرم En&crypt system رمز&نگاری سامانه Passphrase عبارت عبور Confirm passphrase تأیید عبارت عبور Please enter the same passphrase in both boxes. لطفاً عبارت عبور یکسانی را در هر دو جعبه وارد کنید. 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. تمام شد.٪ 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>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>. نمی‌توان شاخه‌های <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! لطفاً 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 &قبول 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 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. گشودن توافق پروانه در مرورگر. 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. 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. هیچ نقطه نصب ریشه ای برای 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' خطای تخصیص حافظه هنگام تنظیم %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 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. لطفاً محصولی را از لیست انتخاب کنید. محصول انتخاب شده نصب خواهد شد. 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 تکرار 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 بوت 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 افرازها 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). <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) دیسک <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. برای راه اندازی پارتیشن سیستم EFI لازم است. برای پیکربندی یک پارتیشن سیستم EFI ، به عقب برگردید و یک سیستم فایل FAT32 را با پرچم٪ 3 فعال کنید و نقطه نصب را نصب کنید. 2. بدون تنظیم پارتیشن سیستم 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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set پرچم پارتیشن سیستم 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 نیز پشتیبانی می کند. برای پیکربندی جدول پارتیشن GPT در BIOS ، (اگر قبلاً این کار انجام نشده است) برگردید و جدول پارتیشن را روی GPT تنظیم کنید ، سپس یک پارتیشن 8 مگابایتی بدون فرمت با پرچم bios_grub ایجاد کنید. برای راه اندازی٪ 1 سیستم BIOS با GPT ، یک پارتیشن 8 مگابایتی بدون قالب لازم است. 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. 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. پارتیشن سیستم ای.اف.آی در %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. 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. سیستم فایل٪ 1 باید تغییر اندازه دهد ، اما نمی تواند. 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'. 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 نیازمندی‌های سامانه 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 افرازش 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 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 تنظیم گذرواژه برای کاربر %1 Setting password for user %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. 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 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 را تغییر داد. Cannot create sudoers file for writing. نمی‌توان پروندهٔ sudoers را برای نوشتن ایجاد کرد. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary خلاصه TrackingInstallJob Installation feedback بازخورد نصب Sending installation feedback. ارسال بازخورد نصب Internal error in install-tracking. HTTP request timed out. زمان درخواست HTTP به پایان رسید. 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. ردیابی به٪ 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. 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 بازخورد 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>به برنامهٔ برپاسازی کالامارس برای %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. WelcomeQmlViewStep Welcome خوش آمدید WelcomeViewStep Welcome خوش آمدید 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> 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 مدل صفحه‌کلید Layouts چینش‌ها Keyboard Layout چینش صفحه‌کلید Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models مدل‌ها Variants دگرگونه‌ها Keyboard Variant Test your keyboard صفحه‌کلیدتان را بیازمایید localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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. 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 تکرار 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> <p>This program will ask you some questions and set up %1 on your computer.</p> About درباره Support پشتیبانی Known issues اشکالات شناخته‌شده Release notes یادداشت‌های انتشار Donate اعانه calamares-3.2.41.1/lang/calamares_fi_FI.ts000066400000000000000000006736411410275732300201720ustar00rootroot00000000000000 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. 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. 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. BootLoaderModel Master Boot Record of %1 %1:n MBR Boot Partition Käynnistysosio System Partition Järjestelmäosio Do not install a boot loader Älä asenna käynnistyslatainta %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Tyhjä sivu Calamares::DebugWindow Form Lomake GlobalStorage Tallennustila JobQueue Työjono Modules Moduulit Type: Tyyppi: none tyhjä Interface: Käyttöliittymä: 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ääritettyn pastebin-tiedostoon. Send Session Log Lähetä istunnon loki Reload Stylesheet Virkistä tyylisivu Displays the tree of widget names in the log (for stylesheet debugging). Näyttää sovelman nimen hakemistopuun lokissa (tyylisivun virheenkorjausta varten). Widget Tree Widget puurakenne Debug information Vianetsinnän tiedot Calamares::ExecutionViewStep Set up Määritä Install Asenna Calamares::FailJob Job failed (%1) Työ epäonnistui (%1) Programmed job failure was explicitly requested. Ohjelmoitu työn epäonnistuminen pyydettiin erikseen. Calamares::JobThread Done Valmis Calamares::NamedJob Example job (%1) Esimerkki työ (%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 Calamares::PythonJob Running %1 operation. Suoritetaan %1 toimenpidettä. Bad working directory path Virheellinen työkansion polku Working directory %1 for python job %2 is not readable. Työkansio %1 pythonin työlle %2 ei ole luettavissa. Bad main script file Virheellinen komentosarjan tiedosto Main script file %1 for python job %2 is not readable. Komentosarjan tiedosto %1 python työlle %2 ei ole luettavissa. Boost.Python error in job "%1". Boost.Python virhe työlle "%1". Calamares::QmlViewStep Loading ... 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 moduulia. (%n second(s)) (%n sekunti(a)) (%n sekuntia) System-requirements checking is complete. Järjestelmän vaatimusten tarkistus on valmis. Calamares::ViewManager Setup Failed Asennus epäonnistui Installation Failed Asentaminen epäonnistui Would you like to paste the install log to the web? Haluatko liittää asennuslokin verkkoon? 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 %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 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> 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> &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? Asennusohjelma sulkeutuu ja kaikki muutoksesi katoavat. CalamaresPython::Helper Unknown exception type Tuntematon poikkeustyyppi unparseable Python error jäsentämätön Python virhe unparseable Python traceback jäsentämätön Python jäljitys Unfetchable Python error. Python virhettä ei voitu hakea. CalamaresWindow %1 Setup Program %1 asennusohjelma %1 Installer %1 asentaja ChangeFilesystemLabelJob Set filesystem label on %1. Valitse tiedostojärjestelmän nimi %1. 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... ChoicePage Form Lomake Select storage de&vice: Valitse tallennus&laite: Current: Nykyinen: 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äynnistyksen lataajan 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. Järjestelmäosiota EFI 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. Järjestelmäosiota EFI %1 käytetään %2 käynnistämiseen. EFI system partition: EFI järjestelmän 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. <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>Install alongside</strong><br/>The installer will shrink a partition to make room for %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 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. 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 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. 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ä kiintolevyllä 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 kiintolevyyn on <strong>kiinnitetty</strong> yksi osioista. This storage device is a part of an <strong>inactive RAID</strong> device. Tämä kiintolevy 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 Clear mounts for partitioning operations on %1 Tyhjennä osiointia varten tehdyt liitokset kohteesta %1 Clearing mounts for partitioning operations on %1. Tyhjennetään liitokset %1 osiointia varten. Cleared all mounts for %1 Kaikki liitokset poistettu kohteesta %1 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 liitosten luetteloa ei voi hakea. Cleared all temporary mounts. Poistettu kaikki väliaikaiset liitokset. 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. Config 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. 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. <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 the Calamares installer for %1</h1> <h1>Tervetuloa Calamares asentajaan %1</h1> <h1>Welcome to the %1 installer</h1> <h1>Tervetuloa %1 asentajaan</h1> Your username is too long. Käyttäjänimesi on liian pitkä. '%1' is not allowed as username. Käyttäjänimessä '%1' ei ole sallittu. Your username must start with a lowercase letter or underscore. Sinun käyttäjänimi täytyy alkaa pienellä kirjaimella tai alaviivalla. Only lowercase letters, numbers, underscore and hyphen are allowed. Vain pienet kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. Your hostname is too short. Koneen nimi on liian lyhyt. Your hostname is too long. Koneen nimi on liian pitkä. '%1' is not allowed as hostname. Koneen nimessä '%1' ei ole sallittu. Only letters, numbers, underscore and hyphen are allowed. Vain kirjaimet, numerot, alaviivat ja tavuviivat ovat sallittuja. Your passwords do not match! Salasanasi eivät täsmää! 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. ContextualProcessJob Contextual Processes Job Prosessien yhteydessä tehtävät CreatePartitionDialog Create a Partition Luo levyosio Si&ze: K&oko: MiB Mib Partition &Type: Osion &tyyppi: &Primary &Ensisijainen 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: FS-nimi: 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. 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'. CreatePartitionTableDialog Create Partition Table Luo Osiotaulukko Creating a new partition table will delete all existing data on the disk. Uuden osiotaulukon luominen poistaa kaikki olemassa olevat tiedostot levyltä. What kind of partition table do you want to create? Minkälaisen osiotaulukon haluat luoda? Master Boot Record (MBR) Master Boot Record (MBR) GUID Partition Table (GPT) GUID Partition Table (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. CreateUserJob Create user %1 Luo käyttäjä %1 Create user <strong>%1</strong>. Luo käyttäjä <strong>%1</strong>. Preserving home directory Kotikansion säilyttäminen Creating user %1 Luodaan käyttäjä %1. Configuring user %1 Määritetään käyttäjää %1 Setting file permissions Tiedostojen oikeuksien määrittäminen CreateVolumeGroupDialog Create Volume Group Luo aseman ryhmä CreateVolumeGroupJob Create new volume group named %1. Luo uusi aseman ryhmä nimellä %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'. 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. 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. DeviceInfoWidget 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. <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 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. 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 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 DummyCppJob Dummy C++ Job Dummy C++ -työ EditExistingPartitionDialog Edit Existing Partition Muokkaa olemassa olevaa osiota Content: Sisältö: &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ä: Flags: Liput: Label for the filesystem Tiedostojärjestelmän nimi FS Label: FS-nimi: Mountpoint already in use. Please select another one. Asennuskohde on jo käytössä. Valitse toinen. EncryptWidget Form Lomake En&crypt system Sa&laa järjestelmä Passphrase Salasana Confirm passphrase Vahvista salasana Please enter the same passphrase in both boxes. Anna sama salasana molemmissa ruuduissa. 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> 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>. Install boot loader on <strong>%1</strong>. Asenna käynnistyslatain <strong>%1</strong>. Setting up mount points. Liitosten määrittäminen. 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öä. <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. FinishedQmlViewStep Finish Valmis FinishedViewStep 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. 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. The installer is not running with administrator rights. Asennus -ohjelma 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. HostInfoJob Collecting information about your machine. Kerätään tietoja laitteesta. 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>. InitcpioJob Creating initramfs with mkinitcpio. Initramfs luominen mkinitcpion avulla. InitramfsJob Creating initramfs. Luodaan initramfs. 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> InteractiveTerminalViewStep Script Skripti KeyboardQmlViewStep Keyboard Näppäimistö KeyboardViewStep Keyboard Näppäimistö 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>. &Cancel &Peruuta &OK &OK 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. LicenseViewStep License Lisenssi 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. LocalePage Region: Alue: Zone: Vyöhyke: &Change... &Vaihda... LocaleQmlViewStep Location Sijainti LocaleTests Quit Sulje LocaleViewStep Location Sijainti 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. 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 paikalliset ja aikavyöhykeen 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 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> OEMViewStep OEM Configuration OEM-kokoonpano Set the OEM Batch Identifier to <code>%1</code>. Aseta OEM valmistajan erän tunnus <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 kieliasetuksia 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 too few digits Salasana sisältää liian vähän numeroita The password contains too few uppercase letters Salasana sisältää liian vähän isoja 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 too few non-alphanumeric characters Salasana sisältää liian vähän erikoismerkkejä The password is too short Salasana on liian lyhyt The password does not contain enough character classes Salasana ei sisällä tarpeeksi merkkiluokkia The password contains too many same characters consecutively Salasana sisältää liian monta samaa merkkiä 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 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ä 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. PackageChooserViewStep Packages Paketit PackageModel Name Nimi Description Kuvaus 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. Page_UserSetup Form Lomake 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 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> 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 %1 %2 size[number] filesystem[name] %1 %2 PartitionModel Free Space Vapaa tila New partition Uusi osiointi Name Nimi File System Tiedostojärjestelmä File System Label Tiedostojärjestelmän nimi Mount Point Liitoskohta Size Koko PartitionPage Form Lomake Storage de&vice: Tallennus&laite: &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ä Resize Volume Group Muuta kokoa aseman-ryhmässä Deactivate Volume Group Poista asemaryhmä käytöstä Remove Volume Group Poista asemaryhmä 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? 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. 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>. <strong>Erase</strong> disk and install %1. <strong>Tyhjennä</strong> levy ja asenna %1. <strong>Replace</strong> a partition with %1. <strong>Vaihda</strong> osio jolla on %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI-järjestelmän osio on välttämätön käynnistyksessä %1.<br/><br/>Jos haluat tehdä EFI-järjestelmän osion, mene takaisin ja luo FAT32-tiedostojärjestelmä, jossa<strong>%3</strong> lippu on käytössä ja liityntäkohta. <strong>%2</strong>.<br/><br/>Voit jatkaa ilman EFI-järjestelmäosiota, mutta järjestelmä ei ehkä käynnisty. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI-järjestelmän osio on välttämätön käynnistyksessä %1.<br/><br/>Osio on määritetty liityntäkohdan kanssa, <strong>%2</strong> mutta sen <strong>%3</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. EFI system partition flag not set EFI-järjestelmäosion lippua ei ole asetettu 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ä. 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ä. There are no partitions to install on. Asennettavia osioita ei ole. PlasmaLnfJob Plasma Look-and-Feel Job Plasman ulkoasu Could not select KDE Plasma Look-and-Feel package 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. PlasmaLnfViewStep Look-and-Feel Ulkoasu PreserveFiles Saving files for later ... Tiedostojen tallentaminen myöhemmin ... 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ää. ProcessResult There was no output from the command. Komentoa ei voitu ajaa. Output: 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. QObject %1 (%2) %1 (%2) unknown tuntematon 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ä RemoveVolumeGroupJob Remove Volume Group named %1. Poista asemaryhmä nimeltä %1. Remove Volume Group named <strong>%1</strong>. Poista asemaryhmä nimeltä <strong>%1</strong>. The installer failed to remove a volume group named '%1'. Asentaja ei onnistunut poistamaan nimettyä asemaryhmää '%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) Unknown system partition (%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. 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'. ResizeVolumeGroupDialog Resize Volume Group Muuta kokoa aseman-ryhmässä 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'. 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... Partitioning Osiointi SetHostNameJob Set hostname %1 Aseta isäntänimi %1 Set hostname <strong>%1</strong>. Aseta koneellenimi <strong>%1</strong>. Setting hostname %1. Asetetaan koneellenimi %1. Internal Error Sisäinen Virhe Cannot write hostname to target system Ei voida kirjoittaa isäntänimeä kohdejärjestelmään. SetKeyboardLayoutJob Set keyboard model to %1, layout to %2-%3 Aseta näppäimistön malliksi %1, asetelmaksi %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. Failed to write keyboard configuration to existing /etc/default directory. 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. 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. 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. 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 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ö SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Yhteenveto 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. TrackingKUserFeedbackJob KDE user feedback KDE käyttäjän palaute Configuring KDE user feedback. Määritä KDE käyttäjän palaute. Error in KDE user feedback configuration. Virhe KDE:n käyttäjän palautteen määrityksissä. Could not configure KDE user feedback correctly, script error %1. KDE käyttäjän palautetta ei voitu määrittää oikein, komentosarjassa virhe %1. Could not configure KDE user feedback correctly, Calamares error %1. KDE käyttäjän 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. TrackingPage Form Lomake Placeholder Paikkamerkki <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> 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 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 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 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 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 Users Käyttäjät UsersViewStep Users Käyttäjät VariantModel Key Column header for key/value Avain Value Column header for key/value Arvo VolumeGroupBaseDialog Create Volume Group Luo aseman ryhmä List of Physical Volumes Fyysisten levyjen luoettelo Volume Group Name: Aseman ryhmän nimi: Volume Group Type: Aseman ryhmä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: 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 &Known issues &Tunnetut ongelmat Open release notes website Avaa julkaisutiedot verkkosivusto &Release notes &Julkaisutiedot <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 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 <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/>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 WelcomeViewStep Welcome Tervetuloa 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/> 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 uuden 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> 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 sijaintiasetukset vaikuttaa joidenkin komentorivin käyttöliittymän elementtien kieliin ja merkistöihin. 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>Sijainti</h1> </br> Järjestelmän kieliasetus vaikuttaa numeroihin ja päivämääriin. Nykyinen asetus on <strong>%1</strong>. Back Takaisin keyboardq Keyboard Model Näppäimistön malli Layouts Asettelut Keyboard Layout Näppäimistöasettelu Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Valitse haluamasi näppäimistömalli tai käytä oletusmallia havaitun laitteiston perusteella. Models Mallit Variants Vaihtoehdot Keyboard Variant Näppäimistön vaihtoehdot Test your keyboard Näppäimistön testaaminen localeq Change Vaihda notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Nämä ovat esimerkkejä julkaisutiedoista.</p> 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än 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ä ja asentaa %1 tietokoneellesi.</p> About Tietoa Support Tuki Known issues Tunnetut ongelmat Release notes Julkaisutiedot Donate Lahjoita calamares-3.2.41.1/lang/calamares_fr.ts000066400000000000000000007123611410275732300176160ustar00rootroot00000000000000 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. BootLoaderModel Master Boot Record of %1 Master Boot Record de %1 Boot Partition Partition de démarrage System Partition Partition système Do not install a boot loader Ne pas installer de chargeur de démarrage %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page Page blanche Calamares::DebugWindow Form Formulaire GlobalStorage Stockage global JobQueue File de travail Modules Modules Type: Type : none aucun Interface: Interface : 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 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 Calamares::ExecutionViewStep Set up Configurer Install Installer 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. Calamares::JobThread Done Fait Calamares::NamedJob Example job (%1) Tâche d'exemple (%1) 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 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". 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). En attente de %n module(s). (%n second(s)) (%n seconde(s)) (%n seconde(s)) System-requirements checking is complete. La vérification des prérequis système est terminée. Calamares::ViewManager Setup Failed Échec de la configuration Installation Failed L'installation a échoué Would you like to paste the install log to the web? Voulez-vous copier le journal d'installation sur le Web ? Error Erreur &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. CalamaresWindow %1 Setup Program Programme de configuration de %1 %1 Installer Installateur %1 ChangeFilesystemLabelJob 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... ChoicePage Form Formulaire Select storage de&vice: Sélectionner le support de sto&ckage : Current: Actuel : 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é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 à %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é. <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 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 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. 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. Config 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. 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) 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é. ContextualProcessJob Contextual Processes Job Tâche des processus contextuels CreatePartitionDialog Create a Partition Créer une partition Si&ze: Ta&ille : 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 &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. 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 %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>%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'. 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) 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. CreateUserJob Create user %1 Créer l'utilisateur %1 Create user <strong>%1</strong>. Créer l'utilisateur <strong>%1</strong>. Preserving home directory Conserver le dossier home Creating user %1 Création de l'utilisateur %1 Configuring user %1 Configuration de l'utilisateur %1 Setting file permissions Définition des autorisations de fichiers CreateVolumeGroupDialog Create Volume Group 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. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Tâche C++ fictive EditExistingPartitionDialog Edit Existing Partition Éditer une partition existante Content: Contenu : &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 : MiB Mio Fi&le System: Sys&tème de fichiers : Flags: Drapeaux : Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Le point de montage est déjà utilisé. Merci d'en sélectionner un autre. EncryptWidget Form Formulaire En&crypt system Chi&ffrer le système Passphrase Phrase secrète Confirm passphrase Confirmer la phrase secrète Please enter the same passphrase in both boxes. Merci d'entrer la même phrase secrète dans les deux champs. 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> 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>. 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. 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. FinishedQmlViewStep Finish Terminer FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Récupération des informations à propos de la machine. IDJob OEM Batch Identifier 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>. InitcpioJob Creating initramfs with mkinitcpio. Création de l'initramfs avec mkinitcpio. InitramfsJob Creating initramfs. création du initramfs 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Clavier KeyboardViewStep Keyboard Clavier 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 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. 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>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. LocalePage Region: Région : Zone: Zone : &Change... &Modifier... LocaleQmlViewStep Location Emplacement LocaleTests Quit Quiter LocaleViewStep Location Localisation 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 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. 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 OEMPage Ba&tch: 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>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> 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 too few digits Le mot de passe ne contient pas assez de chiffres The password contains too few uppercase letters Le mot de passe ne contient pas assez de lettres majuscules 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 too few non-alphanumeric characters Le mot de passe ne contient pas assez de caractères spéciaux The password is too short Le mot de passe est trop court The password does not contain enough character classes Le mot de passe ne contient pas assez de classes de caractères 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 too many characters of the same class consecutively 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 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 PackageChooserPage Form Formulaire Product Name Nom du produit 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é. PackageChooserViewStep Packages Paquets PackageModel Name Nom Description Description Page_Keyboard Form Formulaire Keyboard Model: Modèle de clavier : Type here to test your keyboard Saisir ici pour tester votre clavier Page_UserSetup Form Formulaire 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 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> 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 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 PartitionPage Form Formulaire Storage de&vice: 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 volume Resize Volume Group Redimensionner le groupe de volume Deactivate Volume Group Désactiver le groupe de volume Remove Volume Group 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. 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. <strong>Erase</strong> disk and install %1. <strong>Effacer</strong> le disque et installer %1. <strong>Replace</strong> a partition with %1. <strong>Remplacer</strong> une partition avec %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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 un système de fichiers FAT32 avec l'indicateur <strong>%3</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 peut ne pas démarrer. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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 indicateur <strong>%3</strong> n'est pas défini.<br/>Pour définir l'indicateur, revenez en arrière et modifiez la partition.<br/><br/>Vous pouvez continuer sans définir l'indicateur mais votre le système peut ne pas démarrer. EFI system partition flag not set Drapeau de partition système EFI non configuré 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Une table de partition GPT est la meilleure option pour tous les systèmes. Ce programme d'installation prend également en charge une telle configuration pour les systèmes BIOS.<br/><br/>Pour configurer une table de partition GPT sur le BIOS, (si ce n'est déjà fait) revenez en arrière et définissez la table de partition sur GPT, puis créez une partition non formatée de 8 Mo avec l'indicateur <strong>bios_grub</strong> activé.<br/><br/>Une partition de 8 Mo non formatée est nécessaire pour démarrer %1 sur un système BIOS avec 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 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 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. PlasmaLnfViewStep Look-and-Feel Apparence 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. ProcessResult There was no output from the command. Il y a eu aucune sortie de la commande Output: 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. QObject %1 (%2) %1 (%2) unknown inconnu 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 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'. ReplaceWidget Form Formulaire Select where to install %1.<br/><font color="red">Warning: </font>this will delete all files on the selected partition. 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 : 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. 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'. ResizeVolumeGroupDialog Resize Volume Group Redimensionner le Groupe de Volumes 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'. ResultsListDialog For best results, please ensure that this computer: Pour de meilleur résultats, merci de s'assurer que cet ordinateur : System requirements Configuration requise 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. ScanningDialog Scanning storage devices... Analyse des périphériques de stockage... Partitioning Partitionnement 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. 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. 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éinitialiser les drapeaux sur la partition <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. Réinitialiser les drapeaux sur la partition <strong>%2</strong> de %1 Mio. Clear flags on new 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 %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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Résumé 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é. 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. TrackingPage Form Formulaire Placeholder Emplacement <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;">Cliquer ici pour plus d'informations sur les rapports d'utilisateurs</span><a href="placeholder"><p></p></body> 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 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 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 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 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 Users Utilisateurs UsersViewStep Users Utilisateurs 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 : Used Size: Taille utilisée : Total Sectors: Total des secteurs : Quantity of LVs: Nombre de VLs : 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 &Known issues &Problèmes connus Open release notes website Ouvrir le site des notes de publication &Release notes &Notes de publication <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. <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 WelcomeViewStep Welcome Bienvenue 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/> 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> 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 Modèle de clavier Layouts Dispositions Keyboard Layout Disposition du clavier Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Cliquer sur votre modèle de clavier préféré pour sélectionner la disposition et la variante, ou utiliser celui par défaut en fonction du matériel détecté. Models Modèles Variants Variantes Keyboard Variant Variante de clavier Test your keyboard Tester votre clavier localeq 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> 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> <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 calamares-3.2.41.1/lang/calamares_fr_CH.ts000066400000000000000000005573121410275732300201730ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_fur.ts000066400000000000000000007010621410275732300177770ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? Meti sul web il regjistri di instalazion? 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 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. Cannot get list of temporary mounts. Impussibil otignî la liste dai 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. 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: &Primary &Primarie 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. 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 Content: Contignût: &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: Mountpoint already in use. Please select another one. Pont di montaç za in ûs. Selezione un altri. EncryptWidget Form Formulari En&crypt system &Cifrâ il sisteme 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. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. Instalâ %1 <strong>in bande</strong> a un altri sisteme operatîf. <strong>Erase</strong> disk and install %1. Scancelâ<strong> il disc e instalâ %1. <strong>Replace</strong> a partition with %1. <strong>Sostituî</strong> une partizion cun %1. <strong>Manual</strong> partitioning. Partizionament <strong>manuâl</strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Instalâ %1 <strong>in bande</strong> a un altri sisteme operatîf sul disc <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Scancelâ</strong> il disc <strong>%2</strong> (%3) e instalâ %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Sostituî</strong> une partizion sul disc <strong>%2</strong> (%3) cun %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Partizionament <strong>manuâl</strong> su disc <strong>%1</strong> (%2). Disk <strong>%1</strong> (%2) Disc <strong>%1</strong> (%2) Current: Atuâl: After: Dopo: No EFI system partition configured Nissune partizion di sisteme EFI configurade An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. E covente une partizion di sisteme EFI par inviâ %1.<br/><br/>Par configurâ une partizion di sisteme EFI torne indaûr e selezione o cree un filesystem FAT32 cu la opzion <strong>%3</strong> abilitade e il pont di montaç <strong>%2</strong>.<br/><br/>Si pues continuâ cence stabilî une partizion di sisteme EFI ma al è pussibil che il sisteme no si invii. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. E covente une partizion di sisteme EFI par inviâ %1.<br/><br/>Une partizion e jere configurade cul pont di montaç <strong>%2</strong> ma no je stade stabilide la opzion <strong>%3</strong>. Par configurâ chê opzion, torne indaûr e modifiche la partizion.<br/><br/>Si pues continuâ cence stabilî chê opzion, ma al è facil che il sisteme no si invii. EFI system partition flag not set Opzion de partizion di sisteme EFI no stabilide 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. La miôr opzion par ducj i sistemis e je une tabele des partizions GPT. Il program di instalazion al supuarte ancje chest gjenar di configurazion pai sistemis BIOS.<br/><br/>Par configurâ une tabele des partizions GPT su BIOS, (se nol è za stât fat) torne indaûr e met a GPT la tabele des partizions, dopo cree une partizion no formatade di 8MB cu la opzion <strong>bios_grup</strong> abilitade. <br/><br/>Une partizion no formatade di 8MB e je necessarie par inviâ %1 su sistemsi BIOS cun 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 ResultsListWidget 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. 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 SummaryPage 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. SummaryViewStep Summary Sintesi 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 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 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> 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 Keyboard Model Model di tastiere Layouts Disposizions Keyboard Layout Disposizion di tastiere Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Fâs clic sul model di tastiere preferît par selezionâ la disposizion e la variante, o dopre chel predefinît basât sul hardware rilevât. Models Modei Variants Variantis Keyboard Variant Variante di tastiere Test your keyboard Prove la tastiere 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> 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 calamares-3.2.41.1/lang/calamares_gl.ts000066400000000000000000006344211410275732300176110ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Páxina en branco Calamares::DebugWindow Form Formulario GlobalStorage Almacenamento global JobQueue Cola de traballo Modules Módulos Type: Tipo: none Non 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 Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Informe de depuración de erros. Calamares::ExecutionViewStep Set up Install Instalar Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Feito Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Executando a orde %1 %2 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". 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 Erro na instalación Would you like to paste the install log to the web? 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. 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 CalamaresWindow %1 Setup Program %1 Installer Instalador 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'. O instalador fallou ó actualizar a táboa de particións no disco '%1'. CheckerContainer Gathering system information... A reunir a información do sistema... ChoicePage Form Formulario Select storage de&vice: Seleccione o dispositivo de almacenamento: Current: Actual: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Tarefa de procesos contextuais CreatePartitionDialog Create a Partition Crear partición Si&ze: &Tamaño: 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 &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 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'. 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) 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. CreateUserJob Create user %1 Crear o usuario %1 Create user <strong>%1</strong>. Crear usario <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. 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». 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. 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 DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Tarefa parva de C++ EditExistingPartitionDialog Edit Existing Partition Editar unha partición existente Content: Contido: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Punto de montaxe xa en uso. Faga o favor de escoller outro. EncryptWidget Form Formulario En&crypt system En&criptar sistema 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalar o cargador de arranque en <strong>%1</strong>. Setting up mount points. Configuralos puntos de montaxe. 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. FinishedQmlViewStep Finish Fin FinishedViewStep 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'. 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. 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 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclado KeyboardViewStep Keyboard Teclado 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 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. LicenseViewStep License Licenza 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. LocalePage Region: Rexión: Zone: Zona: &Change... &Cambio... LocaleQmlViewStep Location Localización... LocaleTests Quit LocaleViewStep Location Localización... 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. 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 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 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 too few digits O contrasinal contén moi poucos díxitos The password contains too few uppercase letters O contrasinal contén moi poucas maiú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 too few non-alphanumeric characters O contrasinal contén moi poucos caracteres non alfanuméricos The password is too short O contrasinal é moi curto The password does not contain enough character classes O contrasinal non contén suficientes clases de caracteres The password contains too many same characters consecutively O contrasinal contén demasiados caracteres iguais consecutivos The password contains too many characters of the same class consecutively O contrasinal contén demasiados caracteres da mesma clase consecutivos 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 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. PackageChooserViewStep Packages PackageModel Name Nome Description Descripción Page_Keyboard Form Formulario Keyboard Model: Modelo de teclado. Type here to test your keyboard Teclee aquí para comproba-lo seu teclado. Page_UserSetup Form Formulario 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Limpar</strong> o disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituír</strong> unha partición por %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set A bandeira da partición de sistema EFI non está configurada 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Aparencia e experiencia 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. ProcessResult There was no output from the command. A saída non produciu ningunha saída. Output: 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. QObject %1 (%2) %1 (%2) unknown descoñecido 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 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». 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 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'. ResizeVolumeGroupDialog Resize Volume Group Cambiar o tamaño do grupo de volumes 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». 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Resumo 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. 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. TrackingPage Form Formulario Placeholder Comodín <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> 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 Opinións 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 Usuarios UsersViewStep Users Usuarios 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: 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 &Known issues &Problemas coñecidos Open release notes website &Release notes &Notas de publicación <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. WelcomeQmlViewStep Welcome Benvido WelcomeViewStep Welcome Benvido 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_gu.ts000066400000000000000000005573071410275732300176310ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_he.ts000066400000000000000000007310151410275732300176000ustar00rootroot00000000000000 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> בצמוד להתחלה של טבלת המחיצות (מועדף). פעולה זו היא אוטומטית, אלא אם העדפתך היא להגדיר מחיצות באופן ידני, במקרה זה יש להגדיר זאת בעצמך. 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) Calamares::BlankViewStep Blank Page עמוד ריק Calamares::DebugWindow Form Form GlobalStorage אחסון גלובלי JobQueue JobQueue Modules מודולים Type: סוג: none ללא Interface: מנשק: 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 מידע על ניפוי שגיאות 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 ההתקנה נכשלה Would you like to paste the install log to the web? להדביק את יומן ההתקנה לאינטרנט? 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. האם לבטל את תהליך ההתקנה הנוכחי? אשף ההתקנה ייסגר וכל השינויים יאבדו. 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. הגדרת תווית מערכת קבצים על %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 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 כמחיצת הבית (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 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/> בהתקן האחסון הזה כבר יש מערכת הפעלה אך טבלת המחיצות <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 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 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. <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. נא לבחור במוצר מהרשימה. המוצר הנבחר יותקן. ContextualProcessJob Contextual Processes Job משימת תהליכי הקשר CreatePartitionDialog Create a Partition יצירת מחיצה Si&ze: גו&דל: MiB MiB Partition &Type: &סוג מחיצה: &Primary &ראשית 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. נקודת העיגון בשימוש. נא לבחור בנקודת עיגון אחרת. 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’. 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) 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 המשתמש %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>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) 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 עריכת מחיצה קיימת Content: תוכן: &Keep לה&שאיר Format אתחול Warning: Formatting the partition will erase all existing data. אזהרה: אתחול המחיצה ימחק את כל המידע הקיים. &Mount Point: &נקודת עיגון: Si&ze: גו&דל: MiB MiB Fi&le System: מ&ערכת קבצים: Flags: סימונים: Label for the filesystem תווית למערכת הקבציםת FS Label: תווית מערכת הקבצים: Mountpoint already in use. Please select another one. נקודת העיגון בשימוש. נא לבחור בנקודת עיגון אחרת. EncryptWidget Form Form En&crypt system ה&צפנת המערכת Passphrase מילת צופן Confirm passphrase אישור מילת צופן Please enter the same passphrase in both boxes. נא להקליד את אותה מילת הצופן בשתי התיבות. 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> 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. 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. FinishedQmlViewStep Finish סיום FinishedViewStep 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. The installer failed to format partition %1 on disk '%2'. אשף ההתקנה נכשל בעת אתחול המחיצה %1 על הכונן ‚%2’. 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 מזהה מחזור משווק 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 &אישור 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 רישיון 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 שגיאת התקנת מחיצת שורש מוצפנת 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 מולטימדיה 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>הגדרות משווק</h1><p>Calamares ישתמש בהגדרות המשווק בעת הגדרת מערכת היעד.</p></body></html> 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 too few digits הסיסמה לא מכילה מספיק ספרות The password contains too few uppercase letters הסיסמה מכילה מעט מדי אותיות גדולות The password contains fewer than %n lowercase letters הסיסמה מכילה פחות מאות אחת קטנה הסיסמה מכילה פחות מ־%n אותיות קטנות הסיסמה מכילה פחות מ־%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 ספרות הסיסמה מכילה פחות מ־%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 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 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. נא לבחור במוצר מהרשימה. המוצר הנבחר יותקן. PackageChooserViewStep Packages חבילות PackageModel Name שם Description תיאור Page_Keyboard Form Form Keyboard Model: דגם מקלדת: Type here to test your keyboard ניתן להקליד כאן כדי לבדוק את המקלדת שלך Page_UserSetup Form 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 בית Home 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 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 מחיצות 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). להתקין את %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. מחיצת מערכת EFI נדרשת כדי להפעיל את %1.<br/><br/> כדי להגדיר מחיצת מערכת EFI, יש לחזור ולבחור או ליצור מערכת קבצים מסוג FAT32 עם סימון <strong>%3</strong> פעיל ועם נקודת עיגון <strong>%2</strong>.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. לצורך הפעלת %1 נדרשת מחיצת מערכת EFI.<br/><br/> הוגדרה מחיצה עם נקודת עיגון <strong>%2</strong> אך לא הוגדר סימון <strong>%3</strong>.<br/> כדי לסמן את המחיצה, יש לחזור ולערוך את המחיצה.<br/><br/> ניתן להמשיך ללא הוספת הסימון אך טעינת המערכת עשויה להיכשל. EFI system partition flag not set לא מוגדר סימון מחיצת מערכת 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. Boot partition not encrypted מחיצת האתחול (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> בחלונית יצירת המחיצה. 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 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 דפדוף 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 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. מחיצת מערכת 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, אך לא ניתן. 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 דרישות מערכת 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 חלוקה למחיצות 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 בגודל %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. 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 קבוצות אלו חסרות ממערכת היעד: %1 SetupSudoJob Configure <pre>sudo</pre> users. הגדרת משתמשי <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 SummaryPage 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. להלן סקירת המאורעות שיתרחשו עם תחילת תהליך ההתקנה. SummaryViewStep Summary סיכום 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 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 משוב 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: כמות הכרכים הלוגיים: 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 פתיחת אתר התקלות והמעקב אחר באגים &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>ברוך בואך להתקנת %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>.<br/><br/><a href="https://calamares.io/">הפיתוח של Calamares</a> ממומן על ידי <br/><a href="http://www.blue-systems.com/">Blue Systems</a> - דואגים לחירות התכנה. WelcomeQmlViewStep Welcome ברוך בואך WelcomeViewStep Welcome ברוך בואך 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/> כל הזכויות שמורות 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> 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 דגם מקלדת Layouts פריסות Keyboard Layout פריסת מקלדת Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. נא ללחוץ על דגם המקלדת המועדף עליכם כדי לבחור בפריסה ובהגוון או להשתמש בברירת המחדל בהתאם לחומרה שזוהתה. Models דגמים Variants הגוונים Keyboard Variant הגוון מקלדת Test your keyboard בדיקת המקלדת שלך localeq Change החלפה notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>אלו הערות מהדורה לדוגמה.</p> 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 תרומה calamares-3.2.41.1/lang/calamares_hi.ts000066400000000000000000010302501410275732300175760ustar00rootroot00000000000000 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>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) Calamares::BlankViewStep Blank Page खाली पृष्ठ Calamares::DebugWindow Form रूप GlobalStorage ग्लोबल स्टोरेज JobQueue कार्य पंक्ति Modules मॉड्यूल Type: प्रकार none कुछ नहीं Interface: अंतरफलक : 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 इंस्टॉल करें 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.Python त्रुटि। 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 इंस्टॉल विफल रहा। Would you like to paste the install log to the web? क्या आप इंस्टॉल प्रक्रिया की लॉग फ़ाइल इंटरनेट पर पेस्ट करना चाहेंगे ? 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 के उपयोग से संबंधित एक समस्या है। <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 वापस जाएँ (&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. क्या आप वाकई वर्तमान इंस्टॉल प्रक्रिया रद्द करना चाहते हैं? इंस्टॉलर बंद हो जाएगा व सभी बदलाव नष्ट। 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>%2</strong> विभाजन हेतु फाइल सिस्टम उपनाम <strong>%1</strong> सेट करें। The installer failed to update partition table on disk '%1'. इंस्टॉलर द्वारा डिस्क '%1' पर विभाजन तालिका अपडेट करना विफल। CheckerContainer Gathering system information... सिस्टम की जानकारी प्राप्त की जा रही है... ChoicePage Form रूप Select storage de&vice: डिवाइस चुनें (&v): 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>छोटा करने के लिए विभाजन चुनें, फिर नीचे bar से उसका आकर सेट करें</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>हो जाएगा। <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 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 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 सेटअप करने की न्यूनतम आवश्यकताओं को पूरा नहीं करता।<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. सूची में से वस्तु विशेष का चयन करें। चयनित वस्तु इंस्टॉल कर दी जाएगी। ContextualProcessJob Contextual Processes Job प्रासंगिक प्रक्रिया कार्य CreatePartitionDialog Create a Partition एक विभाजन बनाएँ Si&ze: आकार (&z): MiB MiB Partition &Type: विभाजन का प्रकार (&T): &Primary मुख्य (&P) 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. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चुनें। 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' पर विभाजन बनाने में विफल रहा। 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). <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>. <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> इसमें केवल 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 Dracut हेतु LUKS विन्यास %1 पर राइट करना Skip writing LUKS configuration for Dracut: "/" partition is not encrypted Dracut हेतु LUKS विन्यास %1 पर राइट करना छोड़ें : "/" विभाजन एन्क्रिप्टेड नहीं है Failed to open %1 %1 खोलने में विफल DummyCppJob Dummy C++ Job डमी सी++ कार्य EditExistingPartitionDialog Edit Existing Partition मौजूदा विभाजन को संपादित करें Content: सामग्री : &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: फ्लैग : Label for the filesystem फाइल सिस्टम हेतु उपनाम FS Label: फाइल सिस्टम उपनाम : Mountpoint already in use. Please select another one. माउंट पॉइंट पहले से उपयोग में है । कृपया दूसरा चुनें। EncryptWidget Form रूप En&crypt system सिस्टम एन्क्रिप्ट करें (&E) Passphrase कूटशब्द Confirm passphrase कूटशब्द की पुष्टि करें Please enter the same passphrase in both boxes. कृपया दोनों स्थानों में समान कूटशब्द दर्ज करें। 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> 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 इंस्टॉल करें। 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. <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 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 को फॉर्मेट करने में विफल रहा। 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. मशीन की जानकारी एकत्रित की जा रही है। 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 Konsole इंस्टॉल नहीं है Please install KDE Konsole and try again! कृपया केडीई 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 रद्द करें (&C) &OK ठीक है (&O) 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... बदलें (&C)... LocaleQmlViewStep Location स्थान LocaleTests Quit बंद करें LocaleViewStep Location स्थान 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. विभाजन %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 इंटरनेट 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> 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 too few digits इस कूटशब्द में काफ़ी कम अंक हैं The password contains too few uppercase letters इस कूटशब्द में काफ़ी कम uppercase अक्षर हैं The password contains fewer than %n lowercase letters कूटशब्द में %n से कम लोअरकेस अक्षर हैं कूटशब्द में %n से कम लोअरकेस अक्षर हैं The password contains too few lowercase letters इस कूटशब्द में काफ़ी कम lowercase अक्षर हैं The password contains too few non-alphanumeric characters इस कूटशब्द में काफ़ी कम अक्षरांक हैं The password is too short कूटशब्द बहुत छोटा है The password does not contain enough character classes इस कूटशब्द में नाकाफ़ी अक्षर classes हैं The password contains too many same characters consecutively कूटशब्द में काफ़ी ज्यादा समान अक्षर लगातार हैं The password contains too many characters of the same class consecutively कूटशब्द में काफ़ी ज्यादा एक ही class के अक्षर लगातार हैं 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. सूची में से वस्तु विशेष का चयन करें। चयनित वस्तु इंस्टॉल कर दी जाएगी। 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 बनाएँ (&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 मुख्य विभाजन हैं व और अधिक नहीं जोड़ें जा सकते। कृपया एक मुख्य विभाजन को हटाकर उसके स्थान पर एक विस्तृत विभाजन जोड़ें। 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. विभाजन को %1 से <strong>बदलें</strong>। <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 आरंभ करने हेतु EFI सिस्टम विभाजन ज़रूरी है।<br/><br/>EFI सिस्टम विभाजन को विन्यस्त करने के लिए, वापस जाएँ और चुनें या बनाएँ एक FAT32 फ़ाइल सिस्टम जिस पर <strong>%3</strong> flag चालू हो व माउंट पॉइंट <strong>%2</strong>हो।<br/><br/>आप बिना सेट करें भी आगे बढ़ सकते है पर सिस्टम चालू नहीं होगा। An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 को शुरू करने हेतु EFI सिस्टम विभाजन ज़रूरी है।<br/><br/>विभाजन को माउंट पॉइंट <strong>%2</strong> के साथ विन्यस्त किया गया परंतु उसका <strong>%3</strong> फ्लैग सेट नहीं था।<br/> फ्लैग सेट करने के लिए, वापस जाएँ और विभाजन को edit करें।<br/><br/>आप बिना सेट करें भी आगे बढ़ सकते है पर सिस्टम चालू नहीं होगा। EFI system partition flag not set 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> का flag हो।<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 पैकेज चुना नहीं जा सका 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 का तुरंत ही पूर्वावलोकन कर सकते हैं। PlasmaLnfViewStep Look-and-Feel 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> exit कोड %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/>%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 सिस्टम विभाजन: 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. %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> यह कंप्यूटर %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 विभाजन 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. %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>%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. 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 लक्षित सिस्टम में समूह अनुपस्थित हैं : %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 शेल प्रक्रिया कार्य SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. यह अवलोकन है कि इंस्टॉल शुरू होने के बाद क्या होगा। SummaryViewStep Summary सारांश 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. केडीई उपयोक्ता प्रतिक्रिया सही रूप से विन्यस्त नहीं की जा सकी, स्क्रिप्ट त्रुटि %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। 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 प्रतिक्रिया 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: तार्किक वॉल्यूम की मात्रा : 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> का धन्यवाद।<br/><br/><a href="https://calamares.io/">Calamares</a> का विकास <br/><a href="http://www.blue-systems.com/">ब्लू सिस्टम्स</a> - लिब्रेटिंग सॉफ्टवेयर द्वारा प्रायोजित है। WelcomeQmlViewStep Welcome स्वागत है WelcomeViewStep Welcome स्वागत है 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 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> 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 कुंजीपटल मॉडल Layouts अभिन्यास Keyboard Layout कुंजीपटल अभिन्यास Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. इच्छित अभिन्यास व प्रकार हेतु कुंजीपटल मॉडल पर क्लिक चुनें या फिर हार्डवेयर आधारित डिफ़ॉल्ट मॉडल उपयोग करें। Models मॉडल Variants भिन्न रूप Keyboard Variant कुंजीपटल प्रकार Test your keyboard अपना कुंजीपटल जाँचें localeq Change बदलें notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>ये उदाहरण रिलीज़ नोट्स हैं।</p> 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> <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 दान करें calamares-3.2.41.1/lang/calamares_hr.ts000066400000000000000000006766151410275732300176330ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Prazna stranica Calamares::DebugWindow Form Oblik GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduli Type: Tip: none nijedan Interface: Sučelje: 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 Calamares::ExecutionViewStep Set up Postaviti Install Instaliraj Calamares::FailJob Job failed (%1) Posao nije uspio (%1) Programmed job failure was explicitly requested. Programski neuspjeh posla je izričito zatražen. Calamares::JobThread Done Gotovo Calamares::NamedJob Example job (%1) Primjer posla (%1) 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 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". 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 %n modul(a). Čekam %n modul(a). Čekam %n modul(a). (%n second(s)) (%n sekunda(e)) (%n sekunda(e)) (%n sekunda(e)) System-requirements checking is complete. Provjera zahtjeva za instalaciju sustava je dovršena. Calamares::ViewManager Setup Failed Instalacija nije uspjela Installation Failed Instalacija nije uspjela Would you like to paste the install log to the web? Želite li objaviti dnevnik instaliranja na web? 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. 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. CalamaresWindow %1 Setup Program %1 instalacijski program %1 Installer %1 Instalacijski program ChangeFilesystemLabelJob 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... ChoicePage Form Oblik Select storage de&vice: Odaberi uređaj za spremanje: Current: Trenutni: 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. <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 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 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. 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. Config 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. Regionalne postavke brojeva i datuma će se postaviti na %1. 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: 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. ContextualProcessJob Contextual Processes Job Posao kontekstualnih procesa CreatePartitionDialog Create a Partition Stvori particiju Si&ze: Ve&ličina: 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 &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. 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'. 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) 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. CreateUserJob Create user %1 Stvori korisnika %1 Create user <strong>%1</strong>. Stvori korisnika <strong>%1</strong>. Preserving home directory Očuvanje home direktorija Creating user %1 Stvaram korisnika %1 Configuring user %1 Konfiguriranje korisnika %1 Setting file permissions Postavljanje dozvola za datoteke CreateVolumeGroupDialog Create Volume Group Stvori volume grupu 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Lažni C++ posao EditExistingPartitionDialog Edit Existing Partition Uredi postojeću particiju Content: Sadrž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: Label for the filesystem Oznaka za datotečni sustav FS Label: Oznaka datotečnog sustava: Mountpoint already in use. Please select another one. Točka montiranja se već koristi. Odaberite drugu. EncryptWidget Form Oblik En&crypt system Ši&friraj sustav Passphrase Lozinka Confirm passphrase Potvrdi lozinku Please enter the same passphrase in both boxes. Molimo unesite istu lozinku u oba polja. 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> 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>. Install boot loader on <strong>%1</strong>. Instaliraj boot učitavač na <strong>%1</strong>. Setting up mount points. Postavljam točke montiranja. 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. FinishedQmlViewStep Finish Završi FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Prikupljanje podataka o vašem stroju. 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>. InitcpioJob Creating initramfs with mkinitcpio. Stvaranje initramfs s mkinitcpio. InitramfsJob Creating initramfs. Stvaranje initramfs. 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> InteractiveTerminalViewStep Script Skripta KeyboardQmlViewStep Keyboard Tipkovnica KeyboardViewStep Keyboard Tipkovnica LCLocaleDialog System locale setting 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>. 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 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. 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 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. LocalePage Region: Regija: Zone: Zona: &Change... &Promijeni... LocaleQmlViewStep Location Lokacija LocaleTests Quit izađi LocaleViewStep Location Lokacija 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. 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 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> 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 too few digits Lozinka sadrži premalo brojeva The password contains too few uppercase letters Lozinka sadrži premalo velikih 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 too few non-alphanumeric characters Lozinka sadrži premalo ne-alfanumeričkih znakova The password is too short Lozinka je prekratka The password does not contain enough character classes Lozinka ne sadrži dovoljno razreda znakova The password contains too many same characters consecutively Lozinka sadrži previše uzastopnih znakova The password contains too many characters of the same class consecutively Lozinka sadrži previše uzastopnih znakova iz istog razreda 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 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. PackageChooserViewStep Packages Paketi PackageModel Name Ime Description Opis Page_Keyboard Form Oblik Keyboard Model: Tip tipkovnice: Type here to test your keyboard Ovdje testiraj tipkovnicu Page_UserSetup Form Oblik 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Obriši</strong> disk i instaliraj %1. <strong>Replace</strong> a partition with %1. <strong>Zamijeni</strong> particiju s %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI particija je potrebna za pokretanje %1.<br/><br/>Particija je konfigurirana s točkom montiranja <strong>%2</strong>, ali njezina <strong>%3</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. EFI system partition flag not set Oznaka EFI particije nije postavljena 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Izgled 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. ProcessResult There was no output from the command. Nema izlazne informacije od naredbe. Output: 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. QObject %1 (%2) %1 (%2) unknown nepoznato 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 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'. 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>%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. 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. 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. 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'. ResizeVolumeGroupDialog Resize Volume Group Promijenite veličinu volume grupe 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'. 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 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. 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Sažetak 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 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. TrackingPage Form Oblik Placeholder Rezervirano mjesto <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> 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 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 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 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 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 Users Korisnici UsersViewStep Users Korisnici 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: 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 &Known issues &Poznati problemi Open release notes website Otvorite web mjesto s bilješkama izdanja &Release notes &Napomene o izdanju <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-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 WelcomeViewStep Welcome Dobrodošli 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/> 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> 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 Model tipkovnice Layouts Rasporedi Keyboard Layout Raspored tipkovnice Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Odaberite željeni model tipkovnice odabirom rasporeda i varijante ili upotrijebite zadani na temelju otkrivenog hardvera. Models Modeli Variants Varijante Keyboard Variant Varijanta tipkovnice Test your keyboard Testirajte vašu tipkovnicu localeq Change Promijeni notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p> Ovo su primjeri bilješki izdanja.</p> 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 calamares-3.2.41.1/lang/calamares_hr_HR.ts000066400000000000000000003156521410275732300202130ustar00rootroot00000000000000 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 calamares-3.2.41.1/lang/calamares_hu.ts000066400000000000000000006455731410275732300176350ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Üres oldal Calamares::DebugWindow Form Adatlap GlobalStorage Tárolás JobQueue Feladatok Modules Modulok Type: Típus: none semelyik Interface: Interfész: 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 Calamares::ExecutionViewStep Set up Összeállítás Install Telepít Calamares::FailJob Job failed (%1) Művelet nem sikerült (%1) Programmed job failure was explicitly requested. Kifejezetten kért programozott műveleti hiba. Calamares::JobThread Done Kész Calamares::NamedJob Example job (%1) Mintapélda (%1) 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 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". 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. Várakozás %n modulokra. (%n second(s)) (%n másodperc) (%n másodperc) System-requirements checking is complete. Rendszerkövetelmények ellenőrzése kész. Calamares::ViewManager Setup Failed Telepítési hiba Installation Failed Telepítés nem sikerült Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Program telepítése %1 Installer %1 Telepítő 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'. 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... ChoicePage Form Adatlap Select storage de&vice: Válassz tároló eszközt: Current: Aktuális: 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. <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 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 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 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. 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>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. 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. ContextualProcessJob Contextual Processes Job Környezetfüggő folyamatok feladat CreatePartitionDialog Create a Partition Partíció Létrehozása Si&ze: Mé&ret: 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 &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. 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'. 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) 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. 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. Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Kötetcsoport létrehozása 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”. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Teszt C++ job EditExistingPartitionDialog Edit Existing Partition Meglévő partíció szerkesztése Content: Tartalom: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. A csatolási pont már használatban van. Kérlek, válassz másikat. EncryptWidget Form Adatlap En&crypt system Rendszer titkosítása 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. 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> 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. 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 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. FinishedQmlViewStep Finish Befejezés FinishedViewStep 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. 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. HostInfoJob Collecting information about your machine. 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>. InitcpioJob Creating initramfs with mkinitcpio. initramfs létrehozása mkinitcpio utasítással. InitramfsJob Creating initramfs. initramfs létrehozása. 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> InteractiveTerminalViewStep Script Szkript KeyboardQmlViewStep Keyboard Billentyűzet KeyboardViewStep Keyboard Billentyűzet 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 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. LicenseViewStep License Licensz 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. LocalePage Region: Régió: Zone: Zóna: &Change... &Változtat... LocaleQmlViewStep Location Hely LocaleTests Quit LocaleViewStep Location Hely 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. 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 NotesQmlViewStep Notes 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> 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 too few digits A jelszó túl kevés számjegyet tartalmaz The password contains too few uppercase letters A jelszó túl kevés nagybetű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 too few non-alphanumeric characters A jelszó túl kevés nem alfanumerikus karaktert tartalmaz The password is too short A jelszó túl rövid The password does not contain enough character classes A jelszó nem tartalmaz elég karakterosztályt The password contains too many same characters consecutively A jelszó túl sok egyező karaktert tartalmaz 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 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 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. PackageChooserViewStep Packages PackageModel Name Név Description Leírás Page_Keyboard Form Adatlap Keyboard Model: Billentyűzet modell: Type here to test your keyboard Gépelj itt a billentyűzet teszteléséhez Page_UserSetup Form Adatlap 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 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> 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 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 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. 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> . <strong>Erase</strong> disk and install %1. <strong>Lemez törlés</strong>és %1 telepítés. <strong>Replace</strong> a partition with %1. <strong>A partíció lecserélése</strong> a következővel: %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set EFI partíciós zászló nincs beállítva 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Kinézet 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. ProcessResult There was no output from the command. A parancsnak nem volt kimenete. Output: 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. QObject %1 (%2) %1 (%2) unknown ismeretlen 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 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”. 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 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. ResizeVolumeGroupDialog Resize Volume Group Kötetcsoport átméretezése 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”. 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Összefoglalás 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. 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. TrackingPage Form Adatlap Placeholder Helytartó <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> 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 Visszacsatolás 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 Users Felhasználók UsersViewStep Users Felhasználók 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: 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 &Known issues &Ismert hibák Open release notes website &Release notes &Kiadási megjegyzések <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. WelcomeQmlViewStep Welcome Üdvözlet WelcomeViewStep Welcome Üdvözlet 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_i18n.qrc.in000066400000000000000000000003061410275732300205170ustar00rootroot00000000000000 @calamares_i18n_qrc_content@ calamares-3.2.41.1/lang/calamares_id.ts000066400000000000000000006356611410275732300176120ustar00rootroot00000000000000 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>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 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 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) Calamares::BlankViewStep Blank Page Halaman Kosong Calamares::DebugWindow Form Isian GlobalStorage PenyimpananGlobal JobQueue AntrianTugas Modules Modul Type: Tipe: none tidak ada Interface: Antarmuka: 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 Muat ulang Lembar gaya Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Debug information Informasi debug Calamares::ExecutionViewStep Set up Install Instal Calamares::FailJob Job failed (%1) Pekerjaan gagal (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Selesai Calamares::NamedJob Example job (%1) Contoh pekerjaan (%1) Calamares::ProcessJob Run command '%1' in target system. Jalankan perintah '%1' di dalam sistem target. Run command '%1'. Jalankan perintah '%1'. Running command %1 %2 Menjalankan perintah %1 %2 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". Calamares::QmlViewStep Loading ... Memuat ... QML Step <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. Calamares::ViewManager Setup Failed Pengaturan Gagal Installation Failed Instalasi Gagal Would you like to paste the install log to the web? Maukah anda untuk menempelkan log instalasi ke situs? 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 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. The installation is complete. Close the installer. Instalasi sudah lengkap. Tutup installer. Cancel setup without changing the system. Cancel installation without changing the system. Batalkan instalasi tanpa mengubah sistem yang ada. &Next &Berikutnya &Back &Kembali &Done &Kelar &Cancel &Batal Cancel 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. 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. CalamaresWindow %1 Setup Program %1 Installer 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'. Pemasang gagal memperbarui tabel partisi pada disk '%1'. CheckerContainer Gathering system information... Mengumpulkan informasi sistem... ChoicePage Form Isian Select storage de&vice: Pilih perangkat penyimpanan: Current: Saat ini: 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. <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 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 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. 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. 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.<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>Selamat datang ke program Calamares untuk %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. Nama pengguna Anda terlalu panjang. '%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. 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. ContextualProcessJob Contextual Processes Job Memproses tugas kontekstual CreatePartitionDialog Create a Partition Buat Partisi Si&ze: Uku&ran: MiB MiB Partition &Type: Partisi & Tipe: &Primary &Utama 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 FS Label: 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. 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'. 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) 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. CreateUserJob Create user %1 Buat pengguna %1 Create user <strong>%1</strong>. Buat pengguna <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. 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Tugas C++ Kosong EditExistingPartitionDialog Edit Existing Partition Sunting Partisi yang Ada Content: Isi: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Titik-kait sudah digunakan. Silakan pilih yang lainnya. EncryptWidget Form Formulir En&crypt system &Sistem enkripsi 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instal boot loader di <strong>%1</strong>. Setting up mount points. Menyetel tempat kait. 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. FinishedQmlViewStep Finish Selesai FinishedViewStep Finish Selesai 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. 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'. 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) The setup program is not running with administrator rights. 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. 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 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> InteractiveTerminalViewStep Script Skrip KeyboardQmlViewStep Keyboard Papan Ketik KeyboardViewStep Keyboard Papan Ketik 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 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. LicenseViewStep License Lisensi 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 Hide license text Sembunyikan teks lisensi Show the license text Tampilkan lisensi teks Open license agreement in browser. Buka perjanjian lisensi di peramban LocalePage Region: Wilayah: Zone: Zona: &Change... &Ubah... LocaleQmlViewStep Location Lokasi LocaleTests Quit LocaleViewStep Location Lokasi 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 Peramban perangkat lunak Browser package Peramban paket Web browser Peramban web Kernel Inti Services Jasa Login Masuk Desktop Desktop Applications Aplikasi Communication Komunikasi Development Pengembangan 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 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 too few digits Kata sandi terkandung terlalu sedikit digit The password contains too few uppercase letters Kata sandi terkandung terlalu sedikit huruf besar 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 too few non-alphanumeric characters Kata sandi terkandung terlalu sedikit non-alfanumerik The password is too short Password terlalu pendek The password does not contain enough character classes Kata sandi tidak terkandung kelas karakter yang cukup The password contains too many same characters consecutively Kata sandi terkandung terlalu banyak karakter 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 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 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. PackageChooserViewStep Packages PackageModel Name Nama Description Deskripsi Page_Keyboard Form Isian Keyboard Model: Model Papan Ketik: Type here to test your keyboard Ketik di sini untuk mencoba papan ketik Anda Page_UserSetup Form Isian 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 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 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 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> 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 PartitionModel Free Space Ruang Kosong New partition Partisi baru Name Nama File System Berkas Sistem File System Label Mount Point Lokasi Mount Size Ukuran 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. PartitionViewStep Gathering system information... Mengumpulkan informasi sistem... Partitions Partisi Install %1 <strong>alongside</strong> another operating system. Instal %1 <strong>berdampingan</strong> dengan sistem operasi lain. <strong>Erase</strong> disk and install %1. <strong>Hapus</strong> diska dan instal %1. <strong>Replace</strong> a partition with %1. <strong>Ganti</strong> partisi dengan %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Bendera partisi sistem EFI tidak disetel 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Lihat-dan-Rasakan 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. ProcessResult There was no output from the command. Tidak ada keluaran dari perintah. Output: 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. QObject %1 (%2) %1 (%2) unknown tidak diketahui: 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 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'. 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. 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'. ResizeVolumeGroupDialog Resize Volume Group Ubah-ukuran Grup Volume 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'. 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Ikhtisar 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. 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. TrackingPage Form Formulir Placeholder 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> <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> 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 Umpan balik 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 Pengguna UsersViewStep Users Pengguna 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: 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 &Known issues &Isu-isu yang diketahui Open release notes website &Release notes &Catatan rilis <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. <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 WelcomeViewStep Welcome Selamat Datang 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/> 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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. 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 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. Gunakan sandi yang sama untuk akun 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 calamares-3.2.41.1/lang/calamares_id_ID.ts000066400000000000000000005567151410275732300201700ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ie.ts000066400000000000000000005706311410275732300176060ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Crear un partition Si&ze: &Grandore: MiB Mio Partition &Type: &Primary &Primari 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. 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 Content: Contenete: &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: Mountpoint already in use. Please select another one. EncryptWidget Form Redimensionar un gruppe de tomes En&crypt system &Ciffrar li sistema Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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: Pos: No EFI system partition configured Null partition del sistema EFI es 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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 SummaryPage 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. SummaryViewStep Summary Resume 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 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 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> 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 Keyboard Model Modelle de tastatura Layouts Arangeamentes Keyboard Layout Arangeament de tastatura Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Modelles Variants Variantes Keyboard Variant Test your keyboard Prova vor tastatura localeq Change Modificar notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_is.ts000066400000000000000000006044741410275732300176270ustar00rootroot00000000000000 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 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) Calamares::BlankViewStep Blank Page Auð síða Calamares::DebugWindow Form Eyðublað GlobalStorage VíðværGeymsla JobQueue Vinnuröð Modules Forritseiningar Type: Tegund: none ekkert Interface: Viðmót: 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 Calamares::ExecutionViewStep Set up Setja upp Install Setja upp Calamares::FailJob Job failed (%1) Verk mistókst (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Búið Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Keyri skipun %1 %2 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". 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 Uppsetning mistókst Installation Failed Uppsetning mistókst Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Installer %1 uppsetningarforrit 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'. Uppsetningarforritinu mistókst að uppfæra disksneiðatöflu á diski '%1'. CheckerContainer Gathering system information... Söfnun kerfis upplýsingar... ChoicePage Form Eyðublað Select storage de&vice: Veldu geymslu tæ&ki: Current: Núverandi: 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. <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 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 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. 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. 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. Tungumál kerfisins verður sett sem %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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Búa til disksneið Si&ze: St&ærð: 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 &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. 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'. 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) 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'. CreateUserJob Create user %1 Búa til notanda %1 Create user <strong>%1</strong>. Búa til notanda <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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Breyta fyrirliggjandi disksneið Content: Innihald: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Tengipunktur er þegar í notkun. Veldu einhvern annan. EncryptWidget Form Eyðublað En&crypt system &Dulrita kerfi 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. 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> 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>. Install boot loader on <strong>%1</strong>. Setja ræsistjórann upp á <strong>%1</strong>. Setting up mount points. Set upp tengipunkta. 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. FinishedQmlViewStep Finish Ljúka FinishedViewStep 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'. 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ð. 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 ekki uppsett Please install KDE Konsole and try again! Executing script: &nbsp;<code>%1</code> InteractiveTerminalViewStep Script Skrifta KeyboardQmlViewStep Keyboard Lyklaborð KeyboardViewStep Keyboard Lyklaborð 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 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. LicenseViewStep License Notkunarleyfi 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. LocalePage Region: Hérað: Zone: Svæði: &Change... &Breyta... LocaleQmlViewStep Location Staðsetning LocaleTests Quit LocaleViewStep Location Staðsetning 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 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 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 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 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 Lykilorðið er of stutt 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 Óþekkt villa Password is empty 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. PackageChooserViewStep Packages Pakkar PackageModel Name Heiti Description Lýsing 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ð Page_UserSetup Form Eyðublað 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 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> 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 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ð 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. 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. <strong>Erase</strong> disk and install %1. <strong>Eyða</strong> disk og setja upp %1. <strong>Replace</strong> a partition with %1. <strong>Skipta út</strong> disksneið með %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. PlasmaLnfViewStep Look-and-Feel Útlit og hegðun 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. 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 óþekkt 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 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 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 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'. 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: 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 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 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. 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. Uppsetningarforritinu mistókst að setja flögg á disksneið %1. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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ð. SummaryViewStep Summary Yfirlit 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 Eyðublað Placeholder Frátökueining <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 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 Notendur UsersViewStep Users Notendur 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: 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 &Known issues &Þekktir gallar Open release notes website Opna vefsvæði með upplýsingum um útgáfuna &Release notes &Um útgáfu <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. WelcomeQmlViewStep Welcome Velkomin(n) WelcomeViewStep Welcome Velkomin(n) 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_it_IT.ts000066400000000000000000006654601410275732300202260ustar00rootroot00000000000000 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>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. 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) Calamares::BlankViewStep Blank Page Pagina Vuota Calamares::DebugWindow Form Modulo GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduli Type: Tipo: none nessuna Interface: Interfaccia: 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 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 Calamares::ExecutionViewStep Set up Impostazione Install Installa Calamares::FailJob Job failed (%1) Operazione fallita (%1) Programmed job failure was explicitly requested. Il fallimento dell'operazione programmata è stato richiesto esplicitamente. Calamares::JobThread Done Fatto Calamares::NamedJob Example job (%1) Operazione d'esempio (%1) Calamares::ProcessJob Run command '%1' in target system. Esegui il comando '%1' nel sistema di destinazione Run command '%1'. Esegui il comando '1%'. Running command %1 %2 Comando in esecuzione %1 %2 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". Calamares::QmlViewStep Loading ... Caricamento ... QML Step <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 di %n modulo(i). (%n second(s)) (%n secondo) (%n secondo(i)) System-requirements checking is complete. Il controllo dei requisiti di sistema è completo. Calamares::ViewManager Setup Failed Installazione fallita Installation Failed Installazione non riuscita Would you like to paste the install log to the web? Si vuole mettere il log di installazione sul web? 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 %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 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/>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 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 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. 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. 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. CalamaresWindow %1 Setup Program %1 Programma d'installazione %1 Installer %1 Programma di installazione 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'. Il programma di installazione non è riuscito ad aggiornare la tabella delle partizioni sul disco '%1'. CheckerContainer Gathering system information... Raccolta delle informazioni di sistema... ChoicePage Form Modulo Select storage de&vice: Selezionare un dispositivo di me&moria: Current: Corrente: 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. <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 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 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. 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. Config 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. Set timezone to %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. 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) Network Installation. (Disabled: No package list) 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. 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. 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! Setup Failed Installazione fallita Installation Failed Installazione non riuscita The setup of %1 did not complete successfully. The installation of %1 did not complete successfully. 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. ContextualProcessJob Contextual Processes Job Job dei processi contestuali CreatePartitionDialog Create a Partition Creare una partizione Si&ze: Dimen&sione: 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 &Mount Point: Punto di &mount: Flags: Flag: Label for the filesystem FS Label: 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. 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 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>. 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 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'. 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) 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. CreateUserJob Create user %1 Creare l'utente %1 Create user <strong>%1</strong>. Creare l'utente <strong>%1</strong> Preserving home directory Creating user %1 Configuring user %1 Setting file permissions CreateVolumeGroupDialog Create Volume Group Crea Gruppo di Volumi 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 d'installazione non è riuscito a creare un gruppo di volumi denominato '%1'. DeactivateVolumeGroupJob Deactivate volume group named %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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Processo Dummy C++ EditExistingPartitionDialog Edit Existing Partition Modifica la partizione esistente Content: Contenuto: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Il punto di mount è già in uso. Sceglierne un altro. EncryptWidget Form Modulo En&crypt system Cr&iptare il sistema 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. 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> 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>. Install boot loader on <strong>%1</strong>. Installare il boot loader su <strong>%1</strong>. Setting up mount points. Impostazione dei punti di mount. 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 FinishedQmlViewStep Finish Termina FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Raccogliendo informazioni sulla tua macchina. 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>. InitcpioJob Creating initramfs with mkinitcpio. Sto creando initramfs con mkinitcpio. InitramfsJob Creating initramfs. Sto creando initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Tastiera KeyboardViewStep Keyboard Tastiera 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 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. LicenseViewStep License Licenza 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. LocalePage Region: Area: Zone: Zona: &Change... &Cambia... LocaleQmlViewStep Location Posizione LocaleTests Quit LocaleViewStep Location Posizione 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. 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 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> 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 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 too few digits La password contiene poche cifre The password contains too few uppercase letters La password contiene poche lettere maiuscole The password contains fewer than %n lowercase letters The password contains too few lowercase letters La password contiene poche lettere minuscole The password contains too few non-alphanumeric characters La password contiene pochi caratteri non alfanumerici The password is too short La password è troppo corta The password does not contain enough character classes La password non contiene classi di caratteri sufficienti The password contains too many same characters consecutively La password contiene troppi caratteri uguali consecutivi The password contains too many characters of the same class consecutively La password contiene molti caratteri consecutivi della stessa 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 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 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. PackageChooserViewStep Packages Pacchetti PackageModel Name Nome Description Descrizione Page_Keyboard Form Modulo Keyboard Model: Modello della tastiera: Type here to test your keyboard Digitare qui per provare la tastiera Page_UserSetup Form Modulo 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Cancellare</strong> il disco e installare %1. <strong>Replace</strong> a partition with %1. <strong>Sostituire</strong> una partizione con %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Una partizione EFI è necessaria per avviare %1.<br/><br/> Per configurare una partizione EFI, tornare indietro e selezionare o creare un filesystem FAT32 con il parametro<strong>%3</strong>abilitato e punto di montaggio <strong>%2</strong>. <br/><br/>Si può continuare senza impostare una partizione EFI ma il sistema potrebbe non avviarsi correttamente. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Una partizione EFI è necessaria per avviare %1.<br/><br/> Una partizione è stata configurata con punto di montaggio <strong>%2</strong> ma il suo parametro <strong>%3</strong> non è impostato.<br/>Per impostare il flag, tornare indietro e modificare la partizione.<br/><br/>Si può continuare senza impostare il parametro ma il sistema potrebbe non avviarsi correttamente. EFI system partition flag not set Il flag della partizione EFI di sistema non è impostato. 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Una tabella partizioni GPT è la migliore opzione per tutti i sistemi. Comunque il programma d'installazione supporta anche la tabella di tipo BIOS. <br/><br/>Per configurare una tabella partizioni GPT su BIOS (se non già configurata) tornare indietro e impostare la tabella partizioni a GPT e creare una partizione non formattata di 8 MB con opzione <strong>bios_grub</strong> abilitata.<br/><br/>Una partizione non formattata di 8 MB è necessaria per avviare %1 su un sistema BIOS con 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. 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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. ProcessResult There was no output from the command. Non c'era output dal comando. Output: 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. QObject %1 (%2) %1 (%2) unknown sconosciuto 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 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'. 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 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'. ResizeVolumeGroupDialog Resize Volume Group RIdimensiona Gruppo di Volumi 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' 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Riepilogo 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. 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. TrackingPage Form Modulo Placeholder Segnaposto <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> 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 Valutazione 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 Users Utenti UsersViewStep Users Utenti 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: 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 &Known issues &Problemi conosciuti Open release notes website Apri il sito web delle note di rilascio &Release notes &Note di rilascio <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. <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 WelcomeViewStep Welcome Benvenuti 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 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> 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 Modello di tastiera Layouts Schemi Keyboard Layout Schemi tastiere Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Modelli Variants Varianti Keyboard Variant Test your keyboard Provare la tastiera localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Questo è un esempio di note di rilascio.</p> 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 calamares-3.2.41.1/lang/calamares_ja.ts000066400000000000000000007322721410275732300176040ustar00rootroot00000000000000 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>マスターブートレコード</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) Calamares::BlankViewStep Blank Page 空白のページ Calamares::DebugWindow Form Form GlobalStorage グローバルストレージ JobQueue ジョブキュー Modules モジュール Type: Type: none なし Interface: インターフェース: 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 デバッグ情報 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. 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 エラー。 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. 要求されるシステムの確認を終了しました。 Calamares::ViewManager Setup Failed セットアップに失敗しました。 Installation Failed インストールに失敗 Would you like to paste the install log to the web? インストールログをWebに貼り付けますか? 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. 本当に現在の作業を中止しますか? すべての変更が取り消されます。 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. ファイルシステムのラベルを %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: ストレージデバイスを選択 (&V): 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 に縮小され、%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>されます。 <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 のパーティション操作のため、マウントを解除する 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. コマンドがホスト環境で実行される際、rootのパスの情報が必要になりますが、root のマウントポイントが定義されていません。 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/%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>%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. リストから製品を選んでください。選択した製品がインストールされます。 ContextualProcessJob Contextual Processes Job コンテキストプロセスジョブ CreatePartitionDialog Create a Partition パーティションの生成 Si&ze: サイズ (&Z) MiB MiB Partition &Type: パーティションの種類 (&T): &Primary プライマリ (&P) 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. マウントポイントは既に使用されています。他を選択してください。 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 パーティションを作成する。 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>%1</strong> の新しい <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). <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>. ユーザー <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つだけです。そのうち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) 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 Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition パーティションの編集 Content: 内容: &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: フラグ: Label for the filesystem ファイルシステムのラベル FS Label: FSラベル: Mountpoint already in use. Please select another one. マウントポイントは既に使用されています。他を選択してください。 EncryptWidget Form フォーム En&crypt system システムを暗号化 (&C) Passphrase パスフレーズ Confirm passphrase パスフレーズの確認 Please enter the same passphrase in both boxes. 両方のボックスに同じパスフレーズを入力してください。 FillGlobalStorageJob Set partition information パーティション情報の設定 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. マウントポイントを設定する。 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 終了 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のバッチID 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 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 中止 (&C) &OK 了解 (&O) 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/>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. ブラウザでライセンス契約を開く。 LocalePage Region: 地域: Zone: ゾーン: &Change... 変更 (&C)... 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. 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 ノート 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> 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 too few digits パスワードに含まれる数字の数が少なすぎます The password contains too few uppercase letters パスワードに含まれる大文字の数が少なすぎます The password contains fewer than %n lowercase letters パスワードに含まれる小文字が %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 未満です 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 パスワードが空です PackageChooserPage Form フォーム Product Name 製品名 TextLabel テキストラベル Long Product Description 製品の詳しい説明 Package Selection パッケージの選択 Please pick a product from the list. The selected product will be installed. リストから製品を選んでください。選択した製品がインストールされます。 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>確認のため、同じパスワードを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> 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 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 作成 (&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つのプライマリパーティションを削除し、拡張パーティションを追加してください。 PartitionViewStep Gathering system information... システム情報を取得しています... Partitions パーティション Install %1 <strong>alongside</strong> another operating system. 他のオペレーティングシステムに<strong>共存して</strong> %1 をインストール。 <strong>Erase</strong> disk and install %1. ディスクを<strong>消去</strong>し %1 をインストール。 <strong>Replace</strong> a partition with %1. パーティションを %1 に<strong>置き換える</strong>。 <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 を起動するには EFI システムパーティションが必要です。<br/> <br/>EFI システムパーティションを設定するには、戻って、<strong>%3</strong> フラグを有効にした FAT32 ファイルシステムを選択または作成し、マウントポイントを <strong>%2</strong> にします。<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 を起動するには EFI システムパーティションが必要です。<br/><br/>パーティションはマウントポイント <strong>%2</strong> に設定されましたが、<strong>%3</strong> フラグが設定されていません。フラグを設定するには、戻ってパーティションを編集してください。フラグを設定せずに続行すると、システムが起動しない場合があります。 EFI system partition flag not set 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 に設定し、<strong>bios_grub</strong> フラグを有効にして 8 MB の未フォーマットのパーティションを作成します。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> (暗号化) を選択してください。 has at least one disk device available. は少なくとも1つのディスクデバイスを利用可能です。 There are no partitions to install on. インストールするパーティションがありません。 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 パッケージを選択できませんでした 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 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 ターゲットシステムからliveユーザーを消去 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 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 はサイズ変更が必要ですが、できません。 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. ボリュームグループ %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> このコンピュータは %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 パーティショニング 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. %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>%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 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が停止しました。 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 シェルプロセスジョブ SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. これはインストールを開始した時に起こることの概要です。 SummaryViewStep Summary 要約 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>1度だけ</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 フィードバック 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: LVs の容量: 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 のサイトを開く &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/>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 ようこそ 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/> 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> 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 キーボードモデル Layouts レイアウト Keyboard Layout キーボードレイアウト Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. 好みのキーボードモデルをクリックしてレイアウトとバリアントを選択するか、検出されたハードウェアに基づくデフォルトのキーボードモデルを使用してください。 Models モデル Variants バリアント Keyboard Variant キーボードバリアント Test your keyboard キーボードをテストしてください localeq Change 変更 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>これらはリリースノートの例です。</p> 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 寄付 calamares-3.2.41.1/lang/calamares_kk.ts000066400000000000000000005577471410275732300176330ustar00rootroot00000000000000 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) %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 Would you like to paste the install log to the web? 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: 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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: 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 %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 Қош келдіңіз WelcomeViewStep Welcome Қош келдіңіз 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_kn.ts000066400000000000000000005601071410275732300176160ustar00rootroot00000000000000 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 ಅನುಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary ಪ್ರಾಥಮಿಕ 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ko.ts000066400000000000000000007120571410275732300176220ustar00rootroot00000000000000 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>과 같은 부트 로더를 설치해야 합니다. 이 과정은 자동으로 진행됩니다. 단, 수동 파티셔닝을 선택할 경우, 사용자가 직접 설정을 해야 합니다. 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. 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 디버그 정보 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.Python 오류 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. 시스템 요구사항 검사가 완료 되었습니다. Calamares::ViewManager Setup Failed 설치 실패 Installation Failed 설치 실패 Would you like to paste the install log to the web? 설치 로그를 웹에 붙여넣으시겠습니까? 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 깔라마레스 초기화 실패 %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: 다음 모듈 불러오기 실패: 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. 정말로 현재 설치 프로세스를 취소하시겠습니까? 설치 관리자가 종료되며 모든 변경은 반영되지 않습니다. 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: 저장 장치 선택 (&v) 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. %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/> 이 스토리지 장치에는 이미 운영 체제가 설치되어 있으나 <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 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. 이 명령은 사용자 이름을 알아야 하지만, username이 정의되지 않았습니다. 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 설치를 위한 최소 요구 사항을 충족하지 않습니다.<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. 목록에서 제품을 선택하십시오. 선택한 제품이 설치됩니다. ContextualProcessJob Contextual Processes Job 컨텍스트 프로세스 작업 CreatePartitionDialog Create a Partition 파티션 생성 Si&ze: 크기(&z): MiB MiB Partition &Type: 파티션 유형 (&T): &Primary 주 파티션 (&P) E&xtended 확장 파티션 (&E) Fi&le System: 파일 시스템 (&l): LVM LV name LVM 논리 볼륨 이름 &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. 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. 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'에 파티션을 생성하지 못했습니다. 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). <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에 파티션 테이블을 만들지 못했습니다. 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개 중 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) 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 기존 파티션을 수정합니다 Content: 내용 : &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: 플래그: Label for the filesystem 파일시스템에 대한 레이블 FS Label: FS 레이블: Mountpoint already in use. Please select another one. 마운트 위치가 이미 사용 중입니다. 다른 위치를 선택해주세요. EncryptWidget Form 형식 En&crypt system 암호화 시스템 (&c) Passphrase 암호 Confirm passphrase 암호 확인 Please enter the same passphrase in both boxes. 암호와 암호 확인 상자에 동일한 값을 입력해주세요. 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> 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를 설치합니다. 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. <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. %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 파티션을 포맷하지 못했습니다. 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. 컴퓨터에 대한 정보를 수집하는 중입니다. 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 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 취소 (&C) &OK 확인 (&O) 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/>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. 브라우저에서 라이센스 계약 열기 LocalePage Region: 지역 : Zone: 표준시간대 : &Change... 변경 (&C)... 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. 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 노트 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> 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 암호에 %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자 미만의 숫자가 포함되어 있습니다 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 비밀번호가 비어 있습니다 PackageChooserPage Form 형식 Product Name 제품 이름 TextLabel TextLabel Long Product Description 긴 제품 설명 Package Selection 패키지 선택 Please pick a product from the list. The selected product will be installed. 목록에서 제품을 선택하십시오. 선택한 제품이 설치됩니다. 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>확인을 위해 암호를 두번 입력해 주세요. 올바른 암호에는 문자, 숫자 및 구두점이 혼합되어 있으며 최소 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 루트 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 생성 (&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 기본 파티션이 있으므로 더 이상 추가할 수 없습니다. 대신 기본 파티션 하나를 제거하고 확장 파티션을 추가하세요. 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. 파티션을 %1로 <strong>바꿉니다</strong>. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1을(를) 시작하려면 EFI 시스템 파티션이 필요합니다.<br/><br/>EFI 시스템 파티션을 구성하려면 돌아가서 <strong>%3</strong> 플래그가 활성화된 FAT32 파일 시스템을 선택하거나 만들고 <strong>%2</strong> 지점을 마운트합니다.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1을(를) 시작하려면 EFI 시스템 파티션이 필요합니다.<br/><br/>파티션이 <strong>%2</strong> 마운트 지점으로 구성되었지만 <strong>%3</strong> 플래그가 설정되지 않았습니다.<br/>플래그를 설정하려면 뒤로 돌아가서 파티션을 편집하십시오.<br/><br/>플래그를 설정하지 않고 계속할 수 있지만 시스템을 시작하지 못할 수 있습니다. EFI system partition flag not set 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로 설정한 다음, <strong>bios_grub</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. 설치를 위한 파티션이 없습니다. 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 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 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 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. 깔라마레스는 파일 시스템 크기 조정 작업을 위해 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. %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> 이 컴퓨터는 %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 파티션 작업 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. %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>%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. 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 다음 그룹이 대상 시스템에 없습니다: %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 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. 설치 절차를 시작하면 어떻게 되는지 간략히 설명합니다. SummaryViewStep Summary 요약 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. 시스템 피드백을 정확하게 설정할 수 없습니다, %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 피드백 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: LVs의 용량 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에 대한 깔라마레스 설정 프로그램에 오신 것을 환영합니다.</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. <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 환영합니다 WelcomeViewStep Welcome 환영합니다 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>설치의 전체 로그는 라이브 사용자의 홈 디렉토리에 installation.log로 제공됩니다.<br/> 이 로그는 대상 시스템의 /var/log/installation.log에 복사됩니다.</p> 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 키보드 모델 Layouts 레이아웃 Keyboard Layout 키보드 레이아웃 Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. 원하는 키보드 모델을 클릭하여 레이아웃과 변형을 선택하거나 탐지된 하드웨어를 기준으로 기본 모델을 사용하십시오. Models 모델 Variants 변형 Keyboard Variant 키보드 유형 Test your keyboard 키보드 테스트 localeq Change 변경 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>릴리즈 노트의 예제입니다.</p> 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. 루트는 사용자 이름으로 허용되지 않습니다. 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 사용자 암호를 루트 암호로 재사용합니다 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 기부 calamares-3.2.41.1/lang/calamares_ko_KR.ts000066400000000000000000005567151410275732300202250ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_lo.ts000066400000000000000000005567121410275732300176270ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_lt.ts000066400000000000000000007103261410275732300176250ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Tuščias puslapis Calamares::DebugWindow Form Forma GlobalStorage VisuotinisKaupiklis JobQueue UžduotiesEilė Modules Moduliai Type: Tipas: none nėra Interface: Sąsaja: 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 Calamares::ExecutionViewStep Set up Sąranka Install Diegimas 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. Calamares::JobThread Done Atlikta Calamares::NamedJob Example job (%1) Pavyzdinė užduotis (%1) 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 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". 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. Laukiama %n modulių. Laukiama %n modulių. Laukiama %n modulio. (%n second(s)) (%n sekundė) (%n sekundės) (%n sekundžių) (%n sekundė) System-requirements checking is complete. Sistemos reikalavimų tikrinimas yra užbaigtas. Calamares::ViewManager Setup Failed Sąranka patyrė nesėkmę Installation Failed Diegimas nepavyko Would you like to paste the install log to the web? Ar norėtumėte įdėti diegimo žurnalą į saityną? 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. 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. CalamaresWindow %1 Setup Program %1 sąrankos programa %1 Installer %1 diegimo programa ChangeFilesystemLabelJob 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... ChoicePage Form Forma Select storage de&vice: Pasirinkite atminties įr&enginį: Current: Dabartinis: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Konteksto procesų užduotis CreatePartitionDialog Create a Partition Sukurti skaidinį Si&ze: D&ydis: 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 &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ą. 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'. 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) 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. CreateUserJob Create user %1 Sukurti naudotoją %1 Create user <strong>%1</strong>. Sukurti naudotoją <strong>%1</strong>. Preserving home directory Išsaugomas namų katalogas Creating user %1 Kuriamas naudotojas %1 Configuring user %1 Konfigūruojamas naudotojas %1 Setting file permissions Nustatomi failų leidimai CreateVolumeGroupDialog Create Volume Group Sukurti tomų grupę 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“. 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". 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. DeviceInfoWidget 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) 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 Failed to open %1 Nepavyko atverti %1 DummyCppJob Dummy C++ Job Fiktyvi C++ užduotis EditExistingPartitionDialog Edit Existing Partition Keisti jau esamą skaidinį Content: Turinys: &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: Label for the filesystem Failų sistemos etiketė FS Label: FS etiketė: Mountpoint already in use. Please select another one. Prijungimo taškas jau yra naudojamas. Prašome pasirinkti kitą. EncryptWidget Form Forma En&crypt system Užš&ifruoti sistemą Passphrase Slaptafrazė Confirm passphrase Patvirtinkite slaptafrazę Please enter the same passphrase in both boxes. Prašome abiejuose langeliuose įrašyti tą pačią slaptafrazę. 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> 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>. Install boot loader on <strong>%1</strong>. Diegti paleidyklę skaidinyje <strong>%1</strong>. Setting up mount points. Nustatomi prijungimo taškai. 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. FinishedQmlViewStep Finish Pabaiga FinishedViewStep 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. 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 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. HostInfoJob Collecting information about your machine. Renkama informacija apie jūsų kompiuterį. 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>. InitcpioJob Creating initramfs with mkinitcpio. Sukuriama initramfs naudojant mkinitcpio. InitramfsJob Creating initramfs. Sukuriama initramfs. 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> InteractiveTerminalViewStep Script Scenarijus KeyboardQmlViewStep Keyboard Klaviatūra KeyboardViewStep Keyboard Klaviatūra 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 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. LicenseViewStep License Licencija 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. LocalePage Region: Regionas: Zone: Sritis: &Change... K&eisti... LocaleQmlViewStep Location Vieta LocaleTests Quit Išeiti LocaleViewStep Location Vieta 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. 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 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> 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" 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 too few digits Slaptažodyje yra per mažai skaitmenų The password contains too few uppercase letters Slaptažodyje yra per mažai didžiųjų raidžių 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 too few non-alphanumeric characters Slaptažodyje yra per mažai neraidinių ir neskaitinių simbolių The password is too short Slaptažodis yra per trumpas The password does not contain enough character classes Slaptažodyje nėra pakankamai simbolių klasių The password contains too many same characters consecutively Slaptažodyje yra per daug tokių pačių simbolių 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 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 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. PackageChooserViewStep Packages Paketai PackageModel Name Pavadinimas Description Aprašas Page_Keyboard Form Forma Keyboard Model: Klaviatūros modelis: Type here to test your keyboard Rašykite čia ir išbandykite savo klaviatūrą Page_UserSetup Form Forma 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 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> 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 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 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į. 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. <strong>Erase</strong> disk and install %1. <strong>Ištrinti</strong> diską ir diegti %1. <strong>Replace</strong> a partition with %1. <strong>Pakeisti</strong> skaidinį, įrašant %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. EFI sistemos skaidinys yra būtinas, norint paleisti %1.<br/><br/>Norėdami sukonfigūruoti EFI sistemos skaidinį, grįžkite atgal ir pasirinkite arba sukurkite FAT32 failų sistemą su įjungta <strong>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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>%3</strong> vėliavėlė yra nenustatyta.<br/>Norėdami nustatyti vėliavėlę, grįžkite atgal ir taisykite skaidinį.<br/><br/>Jūs galite tęsti ir nenustatę vėliavėlės, tačiau tokiu atveju, gali nepavykti paleisti jūsų sistemos. EFI system partition flag not set Nenustatyta EFI sistemos skaidinio vėliavėlė 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. 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. 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 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ą. PlasmaLnfViewStep Look-and-Feel Išvaizda ir turinys 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. ProcessResult There was no output from the command. Nebuvo jokios išvesties iš komandos. Output: 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. QObject %1 (%2) %1 (%2) unknown nežinoma 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 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". 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 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'. ResizeVolumeGroupDialog Resize Volume Group Keisti tomų grupės dydį 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. 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 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ą 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ą. 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>. 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. 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 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Suvestinė 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. 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. TrackingPage Form Forma Placeholder Vietaženklis <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> 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 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 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 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 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 Users Naudotojai UsersViewStep Users Naudotojai 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: 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ę &Known issues Ž&inomos problemos Open release notes website Atverti laidos informacijos internetinę svetainę &Release notes Lai&dos informacija <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-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 WelcomeViewStep Welcome Pasisveikinimas 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/> 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> 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 keyboardq Keyboard Model Klaviatūros modelis Layouts Išdėstymai Keyboard Layout Klaviatūros išdėstymas Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Pasirinkite pageidaujamą klaviatūros modelį, kad pasirinktumėte išdėstymą ir variantą arba naudokite numatytąjį, kuris remiasi aptikta aparatine įranga. Models Modeliai Variants Variantai Keyboard Variant Klaviatūros variantas Test your keyboard Išbandykite savo klaviatūrą localeq Change Keisti notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Tai yra pavyzdinė laidos informacija.</p> 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 calamares-3.2.41.1/lang/calamares_lv.ts000066400000000000000000005577041410275732300176400ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_mk.ts000066400000000000000000005575141410275732300176250ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ml.ts000066400000000000000000010172761410275732300176230ustar00rootroot00000000000000 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> പോലെയുള്ള ഒരു ബൂട്ട് ലോഡർ ആപ്ലിക്കേഷൻ ഇൻസ്റ്റാൾ ചെയ്യണം. നിങ്ങൾ മാനുവൽ പാർട്ടീഷനിംഗ് തിരഞ്ഞെടുത്തിട്ടില്ലെങ്കിൽ ഇത് യാന്ത്രികമായി നടക്കേണ്ടതാണ്, അത്തരം സന്ദർഭങ്ങളിൽ നിങ്ങൾ ഇത് സ്വന്തമായി സജ്ജീകരിക്കണം. 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 GlobalStorage JobQueue 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. പൈതൺ ജോബ് %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" എന്ന പ്രവൃത്തിയില്‍ ബൂസ്റ്റ്.പൈതണ്‍ പിശക് 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 മൊഡ്യൂളിനായി കാത്തിരിക്കുന്നു. %n മൊഡ്യൂളുകൾക്കായി കാത്തിരിക്കുന്നു. (%n second(s)) (%1 സെക്കൻഡ്) (%1 സെക്കൻഡുകൾ) System-requirements checking is complete. സിസ്റ്റം-ആവശ്യകതകളുടെ പരിശോധന പൂർത്തിയായി. Calamares::ViewManager Setup Failed സജ്ജീകരണപ്രക്രിയ പരാജയപ്പെട്ടു Installation Failed ഇൻസ്റ്റളേഷൻ പരാജയപ്പെട്ടു Would you like to paste the install log to the web? ഇൻസ്റ്റാൾ ലോഗ് വെബിലേക്ക് പകർത്തണോ? 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. നിലവിലുള്ള ഇൻസ്റ്റാൾ പ്രക്രിയ റദ്ദാക്കണോ? ഇൻസ്റ്റാളർ നിൽക്കുകയും എല്ലാ മാറ്റങ്ങളും നഷ്ടപ്പെടുകയും ചെയ്യും. 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. 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. %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>. <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 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 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> %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. പട്ടികയിൽ നിന്നും ഒരു ഉത്പന്നം തിരഞ്ഞെടുക്കുക. തിരഞ്ഞെടുത്ത ഉത്പന്നം ഇൻസ്റ്റാൾ ചെയ്യപ്പെടുക. ContextualProcessJob Contextual Processes Job സാന്ദർഭിക പ്രക്രിയകൾ ജോലി CreatePartitionDialog Create a Partition ഒരു പാർട്ടീഷൻ സൃഷ്ടിക്കുക Si&ze: വലുപ്പം (&z): MiB MiB Partition &Type: പാർട്ടീഷൻ തരം (&T): &Primary പ്രാഥമികം (&P) 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. മൗണ്ട്പോയിന്റ് നിലവിൽ ഉപയോഗിക്കപ്പെട്ടിരിക്കുന്നു. ദയവായി മറ്റൊരെണ്ണം തിരഞ്ഞെടുക്കൂ. 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' ഡിസ്കിൽ പാർട്ടീഷൻ സൃഷ്ടിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. 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 പാർട്ടീഷൻ ടേബിൾ (ജിപിറ്റി) 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>. <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>ഇ‌എഫ്‌ഐ</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) 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 തുറക്കുന്നതിൽ പരാജയപ്പെട്ടു DummyCppJob Dummy C++ Job ഡമ്മി C++ ജോലി EditExistingPartitionDialog Edit Existing Partition നിലവിലുള്ള പാർട്ടീഷൻ തിരുത്തുക Content: ഉള്ളടക്കം: &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: ഫ്ലാഗുകൾ: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. മൗണ്ട്പോയിന്റ് നിലവിൽ ഉപയോഗിക്കപ്പെട്ടിരിക്കുന്നു. ദയവായി മറ്റൊരെണ്ണം തിരഞ്ഞെടുക്കൂ. EncryptWidget Form ഫോം En&crypt system സിസ്റ്റം എൻക്രിപ്റ്റ് ചെയ്യുക (&c) Passphrase രഹസ്യവാചകം Confirm passphrase രഹസ്യവാചകം സ്ഥിരീകരിക്കുക Please enter the same passphrase in both boxes. രണ്ട് പെട്ടികളിലും ഒരേ രഹസ്യവാചകം നല്‍കുക, 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 ഇപ്പോൾ റീസ്റ്റാർട്ട് ചെയ്യുക (&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. 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>%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 ഫോർമാറ്റ് ചെയ്യുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. 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. ഇൻസ്റ്റാളർ കാണിക്കാൻ തക്ക വലുപ്പം സ്ക്രീനിനില്ല. HostInfoJob Collecting information about your machine. താങ്കളുടെ മെഷീനെ പറ്റിയുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു. 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>എഴുതാനായില്ല. InitcpioJob Creating initramfs with mkinitcpio. mkinitcpio ഉപയോഗിച്ച് initramfs നിർമ്മിക്കുന്നു. InitramfsJob Creating initramfs. 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 റദ്ദാക്കുക (&C) &OK ശരി (&O) 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 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. അനുമതിപത്രനിബന്ധനകൾ ബ്രൗസറിൽ തുറക്കുക. LocalePage Region: പ്രദേശം: Zone: മേഖല: &Change... മാറ്റുക (&C)... LocaleQmlViewStep Location സ്ഥാനം LocaleTests Quit LocaleViewStep Location സ്ഥാനം 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. 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: കൂട്ടം (&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> 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 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 രഹസ്യവാക്ക് സൃഷ്ടിക്കുന്നതിൽ പരാജയപ്പെട്ടു - ആവശ്യത്തിനു 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 ടെക്സ്റ്റ്ലേബൽ Long Product Description ഉത്പന്നത്തിന്റെ ബൃഹത്തായ വിശദീകരണം Package Selection പാക്കേജ് തിരഞ്ഞെടുക്കൽ Please pick a product from the list. The selected product will be installed. പട്ടികയിൽ നിന്നും ഒരു ഉത്പന്നം തിരഞ്ഞെടുക്കുക. തിരഞ്ഞെടുത്ത ഉത്പന്നം ഇൻസ്റ്റാൾ ചെയ്യപ്പെടുക. 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: സ്റ്റോറേജ് ഉപകരണം (&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 പ്രാഥമിക പാർട്ടീഷനുകൾ ഉണ്ട്,ഇനി ഒന്നും ചേർക്കാൻ കഴിയില്ല. പകരം ഒരു പ്രാഥമിക പാർട്ടീഷൻ നീക്കംചെയ്‌ത് എക്സ്ടെൻഡഡ്‌ പാർട്ടീഷൻ ചേർക്കുക. PartitionViewStep Gathering system information... സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കുന്നു... Partitions പാർട്ടീഷനുകൾ Install %1 <strong>alongside</strong> another operating system. മറ്റൊരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനൊപ്പം %1 ഇൻസ്റ്റാൾ ചെയ്യുക. <strong>Erase</strong> disk and install %1. ഡിസ്ക് <strong>മായ്ക്കുക</strong>എന്നിട്ട് %1 ഇൻസ്റ്റാൾ ചെയ്യുക. <strong>Replace</strong> a partition with %1. ഒരു പാർട്ടീഷൻ %1 ഉപയോഗിച്ച് <strong>പുനഃസ്ഥാപിക്കുക.</strong> <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set ഇഎഫ്ഐ സിസ്റ്റം പാർട്ടീഷൻ ഫ്ലാഗ് ക്രമീകരിച്ചിട്ടില്ല 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. 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 കെഡിഇ പ്ലാസ്മ കെട്ടും മട്ടും പാക്കേജ് തിരഞ്ഞെടുക്കാനായില്ല 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. ആജ്ഞ <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> 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/>ഈ സിസ്റ്റത്തിൽ എവിടേയും ഒരു ഇഎഫ്ഐ സിസ്റ്റം പർട്ടീഷൻ കണ്ടെത്താനായില്ല. %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 ഉപകരണത്തിന്റെ വലുപ്പം മാറ്റണം, പക്ഷേ കഴിയില്ല 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 പാർട്ടീഷന്റെ വലുപ്പം മാറ്റുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു 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> %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 പാർട്ടീഷനിങ്ങ് 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. %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> പാർട്ടീഷനിലെ ഫ്ലാഗുകൾ ക്രമീകരിക്കുക. 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ൽ ഫ്ലാഗുകൾ ക്രമീകരിക്കുന്നതിൽ ഇൻസ്റ്റാളർ പരാജയപ്പെട്ടു. 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 ഓട് കൂടീ അവസാനിച്ചു. 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 ഷെൽ പ്രക്രിയകൾ ജോലി SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. നിങ്ങൾ ഇൻസ്റ്റാൾ നടപടിക്രമങ്ങൾ ആരംഭിച്ചുകഴിഞ്ഞാൽ എന്ത് സംഭവിക്കും എന്നതിന്റെ ഒരു അവലോകനമാണിത്. SummaryViewStep Summary ചുരുക്കം TrackingInstallJob Installation feedback ഇൻസ്റ്റളേഷനെ പറ്റിയുള്ള പ്രതികരണം Sending installation feedback. ഇൻസ്റ്റളേഷനെ പറ്റിയുള്ള പ്രതികരണം അയയ്ക്കുന്നു. Internal error in install-tracking. ഇൻസ്റ്റാൾ-പിന്തുടരുന്നതിൽ ആന്തരികമായ പിഴവ്. HTTP request timed out. HTTP അപേക്ഷയുടെ സമയപരിധി കഴിഞ്ഞു. 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. 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> <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. 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 പ്രതികരണം 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 &സംഭാവന ചെയ്യുക 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 -നായുള്ള കലാമാരേസ് സജ്ജീകരണപ്രക്രിയയിലേയ്ക്ക് സ്വാഗതം.</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. WelcomeQmlViewStep Welcome സ്വാഗതം WelcomeViewStep Welcome സ്വാഗതം 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_mr.ts000066400000000000000000005655711410275732300176360ustar00rootroot00000000000000 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 %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. 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 अधिष्ठापना अयशस्वी झाली Would you like to paste the install log to the web? 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 %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> %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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition विभाजन निर्माण करा Si&ze: MiB Partition &Type: विभाजन &प्रकार : &Primary &प्राथमिक 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. 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'. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form स्वरुप En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 प्रणालीची आवशक्यता 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 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.  %1 या एरर कोडसहित usermod रद्द केले. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary सारांश 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 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 %1 पाठबळ 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>‌%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 स्वागत 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_nb.ts000066400000000000000000005647241410275732300176160ustar00rootroot00000000000000 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 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) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Form GlobalStorage Global Lagring JobQueue OppgaveKø Modules Moduler Type: none Interface: Grensesnitt: 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 Calamares::ExecutionViewStep Set up Install Installer Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Ferdig Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Kjører kommando %1 %2 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". 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 Installasjon feilet Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Installer %1 Installasjonsprogram 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 Form Select storage de&vice: Current: 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. <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 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. Cannot get list of temporary mounts. Klarte ikke å få tak i listen over midlertidige monterte disker. 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/> 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. 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> 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Opprett en partisjon Si&ze: St&ørrelse: MiB Partition &Type: Partisjon &Type: &Primary &Primær 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. 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 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) 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 Opprett bruker %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 Content: &Keep Format Warning: Formatting the partition will erase all existing data. &Mount Point: &Monteringspunkt: Si&ze: St&ørrelse: MiB Fi&le System: Flags: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. EncryptWidget Form Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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. Formaterer partisjon %1 med filsystem %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 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. 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 Tastatur KeyboardViewStep Keyboard Tastatur 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 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. LicenseViewStep License Lisens 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. LocalePage Region: Zone: &Change... &Endre... LocaleQmlViewStep Location Plassering LocaleTests Quit LocaleViewStep Location Plassering 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. 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 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 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 too few digits The password contains too few uppercase letters Passordet inneholder for få store 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 too few non-alphanumeric characters The password is too short Passordet er for kort The password does not contain enough character classes The password contains too many same characters consecutively Passordet inneholder for mange like tegn etter hverandre 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 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 PackageChooserPage Form Form Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Description Page_Keyboard Form Form Keyboard Model: Tastaturmodell: Type here to test your keyboard Skriv her for å teste tastaturet ditt Page_UserSetup Form Form 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 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 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. 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. QObject %1 (%2) %1 (%2) unknown 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 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 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 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 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 SetHostNameJob Set hostname %1 Set hostname <strong>%1</strong>. Setting hostname %1. Internal Error Intern feil 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 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary Oppsummering 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 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 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 Brukere UsersViewStep Users Brukere 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 Form Select application and system language &About &Om 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 Velkommen WelcomeViewStep Welcome Velkommen 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ne.ts000066400000000000000000005573071410275732300176200ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ne_NP.ts000066400000000000000000005613311410275732300202050ustar00rootroot00000000000000 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. BootLoaderModel Master Boot Record of %1 Boot Partition System Partition Do not install a boot loader बूट लोडर install नगर्ने %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) उदाहरण कार्य (%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 Would you like to paste the install log to the web? 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 swap छैन Reuse Swap swap पुनः प्रयोग गर्नुहोस Swap (no Hibernate) Swap (with Hibernate) Swap to file ClearMountsJob 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. 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 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> %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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form फारम En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_nl.ts000066400000000000000000006760101410275732300176200ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Lege pagina Calamares::DebugWindow Form Formulier GlobalStorage Globale Opslag JobQueue Wachtrij Modules Modules Type: Type: none geen Interface: Interface: 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. 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 Calamares::ExecutionViewStep Set up Inrichten Install Installeer Calamares::FailJob Job failed (%1) Taak gefaald (%1) Programmed job failure was explicitly requested. Geprogrameerde taakfout was expliciet aangevraagd. Calamares::JobThread Done Gereed 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 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". 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 Setup Failed Voorbereiding mislukt Installation Failed Installatie Mislukt Would you like to paste the install log to the web? Wil je het installatielogboek plakken naar het web? 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. 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. CalamaresWindow %1 Setup Program %1 Voorbereidingsprogramma %1 Installer %1 Installatieprogramma 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'. Het installatieprogramma kon de partitietabel op schijf '%1' niet bijwerken . CheckerContainer Gathering system information... Systeeminformatie verzamelen... ChoicePage Form Formulier Select storage de&vice: Selecteer &opslagmedium: Current: Huidig: 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>. <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 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 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. 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. Config 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. 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) 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! 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. ContextualProcessJob Contextual Processes Job Contextuele processen Taak CreatePartitionDialog Create a Partition Maak partitie Si&ze: &Grootte: MiB MiB Partition &Type: Partitie&type: &Primary &Primair 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. 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'. 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) 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. CreateUserJob Create user %1 Maak gebruiker %1 Create user <strong>%1</strong>. Maak gebruiker <strong>%1</strong> Preserving home directory Gebruikersmap wordt behouden Creating user %1 Gebruiker %1 aanmaken Configuring user %1 Gebruiker %1 instellen 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. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job C++ schijnopdracht EditExistingPartitionDialog Edit Existing Partition Bestaande Partitie Aanpassen Content: Inhoud: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Aankoppelpunt reeds in gebruik. Gelieve een andere te kiezen. EncryptWidget Form Formulier En&crypt system En&crypteer systeem Passphrase Wachtwoordzin Confirm passphrase Bevestig wachtwoordzin Please enter the same passphrase in both boxes. Gelieve in beide velden dezelfde wachtwoordzin in te vullen. 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> 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>. Install boot loader on <strong>%1</strong>. Installeer bootloader op <strong>%1</strong>. Setting up mount points. Aankoppelpunten instellen. 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 FinishedQmlViewStep Finish Beëindigen FinishedViewStep 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. 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 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 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Toetsenbord KeyboardViewStep Keyboard Toetsenbord 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 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 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 Hide license text Verberg licentietekst Show the license text Toon licentietekst Open license agreement in browser. Open licentieovereenkomst in webbrowser. LocalePage Region: Regio: Zone: Zone: &Change... &Aanpassen LocaleQmlViewStep Location Locatie LocaleTests Quit LocaleViewStep Location Locatie 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. 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 too few digits Het wachtwoord bevat te weinig cijfers The password contains too few uppercase letters Het wachtwoord bevat te weinig hoofdletters. 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 too few non-alphanumeric characters Het wachtwoord bevat te weinig niet-alfanumerieke symbolen. The password is too short Het wachtwoord is te kort. The password does not contain enough character classes Het wachtwoord bevat te weinig karaktergroepen The password contains too many same characters consecutively Het wachtwoord bevat te veel dezelfde karakters 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 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. PackageChooserViewStep Packages Pakketten PackageModel Name Naam Description Beschrijving Page_Keyboard Form Formulier Keyboard Model: Toetsenbord model: Type here to test your keyboard Typ hier om uw toetsenbord te testen 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? login Gebruikersnaam What is the name of this computer? Wat is de naam van deze computer? <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> 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 PartitionModel Free Space Vrije ruimte New partition Nieuwe partitie Name Naam File System Bestandssysteem File System Label Mount Point Aankoppelpunt Size Grootte 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. PartitionViewStep Gathering system information... Systeeminformatie verzamelen... Partitions Partities Install %1 <strong>alongside</strong> another operating system. Installeer %1 <strong>naast</strong> een ander besturingssysteem. <strong>Erase</strong> disk and install %1. <strong>Wis</strong> schijf en installeer %1. <strong>Replace</strong> a partition with %1. <strong>Vervang</strong> een partitie met %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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>%3</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. EFI system partition flag not set EFI-systeem partitievlag niet ingesteld. 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Een GPT-partitie is de beste optie voor alle systemen. Dit installatieprogramma ondersteund ook zulke installatie voor BIOS systemen.<br/><br/>Om een GPT-partitie te configureren, (als dit nog niet gedaan is) ga terug en stel de partitietavel in als GPT en maak daarna een 8 MB ongeformateerde partitie aan met de <strong>bios_grub</strong>-vlag ingesteld.<br/><br/>Een ongeformateerde 8 MB partitie is nodig om %1 te starten op BIOS-systemen met 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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. ProcessResult There was no output from the command. Er was geen uitvoer van de opdracht. Output: 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. QObject %1 (%2) %1 (%2) unknown onbekend 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. 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. 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. ResizeVolumeGroupDialog Resize Volume Group Volumegroep herschalen 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. 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> 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 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 te installeren.<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. ScanningDialog Scanning storage devices... Opslagmedia inlezen... Partitioning Partitionering 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Samenvatting 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. 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. TrackingPage Form Formulier Placeholder Plaatshouder <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> 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 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 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 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 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 Users Gebruikers UsersViewStep Users Gebruikers 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: WelcomePage Form Formulier Select application and system language Selecteer applicatie- en systeemstaal. &About &Over 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 %1 installer.</h1> <h1>Welkom in het %1 installatieprogramma.</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. <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 WelcomeViewStep Welcome Welkom 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/>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> 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 Toetensbord model Layouts Indeling Keyboard Layout Toetesenbord indeling Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Kies je voorkeurstoetsenbordmodel om lay-out en variant te selecteren, of gebruik het standaardmodel op de gedetecteerde hardware. Models Modellen Variants Varianten Keyboard Variant Toetsenbord Variant Test your keyboard Test je toetsenbord localeq Change Veranderen notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Dit zijn voorbeeld release-opmerkingen.</p> 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> <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 calamares-3.2.41.1/lang/calamares_pl.ts000066400000000000000000006355551410275732300176330ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Pusta strona Calamares::DebugWindow Form Formularz GlobalStorage Ogólne przechowywanie JobQueue Oczekujące zadania Modules Moduły Type: Rodzaj: none brak Interface: Interfejs: 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 Calamares::ExecutionViewStep Set up Install Zainstaluj Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Ukończono Calamares::NamedJob Example job (%1) Calamares::ProcessJob Run command '%1' in target system. Run command '%1'. Running command %1 %2 Wykonywanie polecenia %1 %2 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". 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). Oczekiwanie na %n moduł. Oczekiwanie na %n moduły. Oczekiwanie na %n modułów. Oczekiwanie na %n moduł(y). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Nieudane ustawianie Installation Failed Wystąpił błąd instalacji Would you like to paste the install log to the web? 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 setup? Kontynuować z programem instalacyjnym? 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> 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. 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. CalamaresWindow %1 Setup Program %1 Installer Instalator %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'. Instalator nie mógł zaktualizować tablicy partycji na dysku '%1'. CheckerContainer Gathering system information... Zbieranie informacji o systemie... ChoicePage Form Formularz Select storage de&vice: &Wybierz urządzenie przechowywania: Current: Bieżący: 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. <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 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 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. 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. Config 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. 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: 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. 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! 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 Please pick a product from the list. The selected product will be installed. ContextualProcessJob Contextual Processes Job Działania procesów kontekstualnych CreatePartitionDialog Create a Partition Utwórz partycję Si&ze: Ro&zmiar: 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 &Mount Point: Punkt &montowania: Flags: Flagi: Label for the filesystem 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. 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'. 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) 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. CreateUserJob Create user %1 Utwórz użytkownika %1 Create user <strong>%1</strong>. Utwórz użytkownika <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. 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 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 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Działanie obiektu Dummy C++ EditExistingPartitionDialog Edit Existing Partition Edycja istniejącej partycji Content: Zawartość: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Punkt montowania jest już używany. Proszę wybrać inny. EncryptWidget Form Formularz En&crypt system Zaszy&fruj system 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. 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> 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>. Install boot loader on <strong>%1</strong>. Zainstaluj program rozruchowy na <strong>%1</strong>. Setting up mount points. Ustawianie punktów montowania. 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. FinishedQmlViewStep Finish Koniec FinishedViewStep 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'. 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. 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. Tworzenie initramfs z mkinitcpio. InitramfsJob Creating initramfs. Tworzenie initramfs. 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> InteractiveTerminalViewStep Script Skrypt KeyboardQmlViewStep Keyboard Klawiatura KeyboardViewStep Keyboard Klawiatura 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 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. LicenseViewStep License Licencja 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. LocalePage Region: Region: Zone: Strefa: &Change... &Zmień... LocaleQmlViewStep Location Położenie LocaleTests Quit LocaleViewStep Location Położenie 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. MachineIdJob Generate machine-id. Generuj machine-id. Configuration Error Błąd konfiguracji 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 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 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 Konfiguracja OEM 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 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 too few digits Hasło zawiera zbyt mało znaków The password contains too few uppercase letters Hasło zawiera zbyt mało wielkich liter The password contains fewer than %n lowercase letters The password contains too few lowercase letters Hasło zawiera zbyt mało małych liter The password contains too few non-alphanumeric characters Hasło zawiera zbyt mało znaków niealfanumerycznych The password is too short Hasło jest zbyt krótkie The password does not contain enough character classes Hasło zawiera zbyt mało rodzajów znaków The password contains too many same characters consecutively Hasło zawiera zbyt wiele powtarzających się znaków 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 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 PackageChooserPage Form Formularz Product Name TextLabel EtykietaTekstowa Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Nazwa Description Opis Page_Keyboard Form Form Keyboard Model: Model klawiatury: Type here to test your keyboard Napisz coś tutaj, aby sprawdzić swoją klawiaturę Page_UserSetup Form Form What is your name? Jak się nazywasz? Your Full Name What name do you want to use to log in? Jakiego imienia chcesz używać do logowania się? login What is the name of this computer? Jaka jest nazwa tego komputera? <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 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 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. 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> 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 PartitionModel Free Space Wolna powierzchnia New partition Nowa partycja Name Nazwa File System System plików File System Label Mount Point Punkt montowania Size Rozmiar 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. 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. <strong>Erase</strong> disk and install %1. <strong>Wyczyść</strong> dysk i zainstaluj %1. <strong>Replace</strong> a partition with %1. <strong>Zastąp</strong> partycję poprzez %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Flaga partycji systemowej EFI nie została ustawiona 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Wygląd-i-Zachowanie 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. ProcessResult There was no output from the command. W wyniku polecenia nie ma żadnego rezultatu. Output: 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. QObject %1 (%2) %1 (%2) unknown nieznany extended rozszerzona unformatted niesformatowany swap przestrzeń wymiany Default Domyślnie 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) (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 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 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 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'. ResizeVolumeGroupDialog Resize Volume Group Zmień Rozmiar Grupy Woluminów 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 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 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 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. 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. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Podsumowanie 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. 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. TrackingPage Form Formularz Placeholder Symbol zastępczy <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> 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 Informacje zwrotne 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 Użytkownicy UsersViewStep Users Użytkownicy VariantModel Key Column header for key/value 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 : 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 &Known issues &Znane problemy Open release notes website &Release notes Informacje o &wydaniu <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. WelcomeQmlViewStep Welcome Witamy WelcomeViewStep Welcome Witamy 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 Pokaż informacje debugowania 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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? Jak się nazywasz? Your Full Name 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 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 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. 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 calamares-3.2.41.1/lang/calamares_pt_BR.ts000066400000000000000000007036631410275732300202220ustar00rootroot00000000000000 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 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. 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) Calamares::BlankViewStep Blank Page Página em Branco Calamares::DebugWindow Form Formulário GlobalStorage Armazenamento Global JobQueue Fila de Trabalhos Modules Módulos Type: Tipo: none nenhum Interface: Interface: 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 Calamares::ExecutionViewStep Set up Configurar Install Instalar Calamares::FailJob Job failed (%1) A tarefa falhou (%1) Programmed job failure was explicitly requested. Falha na tarefa programada foi solicitada explicitamente. Calamares::JobThread Done Concluído Calamares::NamedJob Example job (%1) Tarefa de exemplo (%1) 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 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". 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. Esperando por %n módulos. (%n second(s)) (%n segundo) (%n segundos) System-requirements checking is complete. Verificação de requisitos do sistema completa. Calamares::ViewManager Setup Failed A Configuração Falhou Installation Failed Falha na Instalação Would you like to paste the install log to the web? Deseja colar o registro de instalação na web? 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. 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. 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. CalamaresWindow %1 Setup Program Programa de configuração %1 %1 Installer Instalador %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'. O instalador falhou ao atualizar a tabela de partições no disco '%1'. CheckerContainer Gathering system information... Coletando informações do sistema... ChoicePage Form Formulário Select storage de&vice: Selecione o dispositivo de armazenamento: Current: Atual: 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>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 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 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. 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 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. Config 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. A localidade dos números e datas será definida como %1. 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 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! 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. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma partição Si&ze: &Tamanho: 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 &Mount Point: Ponto de Montagem: Flags: Marcadores: Label for the filesystem FS Label: 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. 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'. 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) 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. CreateUserJob Create user %1 Criar usuário %1 Create user <strong>%1</strong>. Criar usuário <strong>%1</strong>. Preserving home directory Preservando o diretório home Creating user %1 Criando usuário %1 Configuring user %1 Configurando usuário %1 Setting file permissions Definindo permissões de arquivo CreateVolumeGroupDialog Create Volume Group Criar Grupo de Volumes 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'. 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'. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editar Partição Existente Content: Conteú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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor, selecione outro. EncryptWidget Form Formulário En&crypt system &Criptografar sistema 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalar gerenciador de inicialização em <strong>%1</strong>. Setting up mount points. Configurando pontos de montagem. 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. FinishedQmlViewStep Finish Concluir FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Coletando informações sobre a sua máquina. 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>. InitcpioJob Creating initramfs with mkinitcpio. Criando initramfs com mkinitcpio. InitramfsJob Creating initramfs. Criando initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclado KeyboardViewStep Keyboard Teclado 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 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 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. LicenseViewStep License Licença 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. LocalePage Region: Região: Zone: Área: &Change... &Mudar... LocaleQmlViewStep Location Localização LocaleTests Quit LocaleViewStep Location Localização 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. 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 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 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> 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. 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' 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 too few digits A senha contém poucos dígitos The password contains too few uppercase letters A senha contém poucas letras maiú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 too few non-alphanumeric characters A senha contém poucos caracteres não alfanuméricos The password is too short A senha é muito curta The password does not contain enough character classes A senha não contém tipos suficientes de caracteres The password contains too many same characters consecutively A senha contém muitos caracteres iguais 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 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 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. PackageChooserViewStep Packages Pacotes PackageModel Name Nome Description Descrição Page_Keyboard Form Formulário Keyboard Model: Modelo de teclado: Type here to test your keyboard Escreva aqui para testar o seu teclado Page_UserSetup Form Formulário 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 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 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, 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 PartitionModel Free Space Espaço livre New partition Nova partição Name Nome File System Sistema de arquivos File System Label Mount Point Ponto de montagem Size Tamanho 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. 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. <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> uma partição com %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Uma partição de sistema EFI é necessária para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte e selecione ou crie um sistema de arquivos FAT32 com o marcador <strong>%3</strong> ativado e o ponto de montagem <strong>%2</strong>.<br/><br/>Você pode continuar sem definir uma partição de sistema EFI, mas seu sistema poderá falhar ao iniciar. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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 o marcador <strong>%3</strong> não foi definido.<br/>Para definir o marcador, volte e edite a partição.<br/><br/>Você pode continuar sem definir o marcador, mas seu sistema poderá falhar ao iniciar. EFI system partition flag not set Marcador da partição de sistema EFI não definido 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. 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 e defina a tabela de partições como GPT, depois crie uma partição sem formatação de 8 MB com o marcador <strong>bios_grub</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 boot 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. 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 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. PlasmaLnfViewStep Look-and-Feel Tema 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. ProcessResult There was no output from the command. Não houve saída do comando. Output: 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. QObject %1 (%2) %1 (%2) unknown desconhecido 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 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'. 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. 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'. ResizeVolumeGroupDialog Resize Volume Group Redimensionar Grupo de Volumes 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'. 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 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. ScanningDialog Scanning storage devices... Localizando dispositivos de armazenamento... Partitioning Particionando 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 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. 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>. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Resumo 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. 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. TrackingPage Form Formulário Placeholder Substituto <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> 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 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 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 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 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 Users Usuários UsersViewStep Users Usuários 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: WelcomePage Form Formulário Select application and system language 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 &Known issues &Problemas conhecidos Open release notes website Abrir o site com as notas de lançamento &Release notes &Notas de lançamento <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. <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 WelcomeViewStep Welcome Bem-vindo 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/> 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> 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 Modelo de Teclado Layouts Layouts Keyboard Layout Layout do Teclado Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Clique no seu modelo de teclado preferido para selecionar o layout e a variante, ou use o padrão baseado no hardware detectado. Models Modelos Variants Variantes Keyboard Variant Variante do Teclado Test your keyboard Teste seu teclado localeq Change Modificar notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Estes são exemplos de notas.</p> 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 fazer login 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. 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. 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. 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 calamares-3.2.41.1/lang/calamares_pt_PT.ts000066400000000000000000007060171410275732300202360ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Página em Branco Calamares::DebugWindow Form Formulário GlobalStorage ArmazenamentoGlobal JobQueue FilaDeTrabalho Modules Módulos Type: Tipo: none nenhum Interface: Interface: 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 Calamares::ExecutionViewStep Set up Configuração Install Instalar Calamares::FailJob Job failed (%1) Tarefa falhou (%1) Programmed job failure was explicitly requested. Falha de tarefa programada foi explicitamente solicitada. Calamares::JobThread Done Concluído Calamares::NamedJob Example job (%1) Exemplo de tarefa (%1) 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 A executar comando %1 %2 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". 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). A aguardar por %n módulo(s). (%n second(s)) (%n segundo(s)) (%n segundo(s)) System-requirements checking is complete. A verificação de requisitos de sistema está completa. Calamares::ViewManager Setup Failed Falha de Instalação Installation Failed Falha na Instalação Would you like to paste the install log to the web? Deseja colar o registo de instalação na Web? Error Erro &Yes &Sim &No &Não &Close &Fechar Install Log Paste URL 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> 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> &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. 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. CalamaresWindow %1 Setup Program %1 Programa de Instalação %1 Installer %1 Instalador ChangeFilesystemLabelJob 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... ChoicePage Form Formulário Select storage de&vice: Selecione o dis&positivo de armazenamento: Current: Atual: 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. <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 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 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. 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. Config 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. Set timezone to %1/%2. Definir fuso horário para %1/%2. 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. 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) 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çã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. ContextualProcessJob Contextual Processes Job Tarefa de Processos Contextuais CreatePartitionDialog Create a Partition Criar uma Partição Si&ze: Ta&manho: 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 &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. 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'. 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) 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. CreateUserJob Create user %1 Criar utilizador %1 Create user <strong>%1</strong>. Criar utilizador <strong>%1</strong>. Preserving home directory A preservar o directório da pasta pessoal Creating user %1 A criar utilizador %1 Configuring user %1 A configurar o utilizador %1 Setting file permissions A definir permissões de ficheiro CreateVolumeGroupDialog Create Volume Group Criar Grupo de Volume 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Tarefa Dummy C++ EditExistingPartitionDialog Edit Existing Partition Editar Partição Existente Content: Conteúdo: &Keep &Manter Format 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: Label for the filesystem Nome para o sistema de ficheiros FS Label: Identificação do FS: Mountpoint already in use. Please select another one. Ponto de montagem já em uso. Por favor selecione outro. EncryptWidget Form Forma En&crypt system En&criptar systema 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalar carregador de arranque em <strong>%1</strong>. Setting up mount points. Definindo pontos de montagem. 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. FinishedQmlViewStep Finish Finalizar FinishedViewStep 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'. 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 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. HostInfoJob Collecting information about your machine. A recolher informação acerca da 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>. InitcpioJob Creating initramfs with mkinitcpio. A criar o initramfs com o mkinitcpio. InitramfsJob Creating initramfs. A criar o initramfs. 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Teclado KeyboardViewStep Keyboard Teclado 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 da interface da linha de comandos.<br/>A definição atual é <strong>%1</strong>. &Cancel &Cancelar &OK &OK 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 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 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 Region: Região: Zone: Zona: &Change... &Alterar... LocaleQmlViewStep Location Localização LocaleTests Quit Sair LocaleViewStep Location Localização 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. 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. Por favor 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 Theming Temas Gaming Jogos Utilities Utilitários 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>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 too few digits A palavra-passe contém muito poucos dígitos The password contains too few uppercase letters A palavra-passe contém muito poucas letras maiú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 too few non-alphanumeric characters A palavra-passe contém muito poucos caracteres não alfanuméricos The password is too short A palavra-passe é demasiado pequena The password does not contain enough character classes A palavra-passe não contém classes de carateres suficientes The password contains too many same characters consecutively A palavra-passe contém demasiados carateres iguais consecutivos 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 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 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. PackageChooserViewStep Packages Pacotes PackageModel Name Nome Description Descrição 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 Page_UserSetup Form Formulário 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Apagar</strong> disco e instalar %1. <strong>Replace</strong> a partition with %1. <strong>Substituir</strong> a partição com %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. É necessário uma partição de sistema EFI para iniciar %1.<br/><br/>Para configurar uma partição de sistema EFI, volte atrás e faça a seleção ou crie um sistema de ficheiros FAT32 com a flag <strong>%3</strong> ativada e o ponto de montagem <strong>%2</strong>.<br/><br/>Pode continuar sem definir uma partição de sistema EFI, mas o seu sistema poderá falhar ao iniciar. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. É necessário uma partição de sistema EFI para iniciar %1.<br/><br/>Uma partição foi configurada com o ponto de montagem <strong>%2</strong>, mas não foi definida a flag <strong>%3</strong>.<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 poderá falhar ao iniciar. EFI system partition flag not set flag não definida da partição de sistema EFI 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. 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>bios_grub</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 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. PlasmaLnfViewStep Look-and-Feel Aparência 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. ProcessResult There was no output from the command. O comando não produziu saída de dados. Output: 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. QObject %1 (%2) %1 (%2) unknown desconhecido 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 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'. 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 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 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'. ResizeVolumeGroupDialog Resize Volume Group Redimensionar Grupo de Volume 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'. 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> 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 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 %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 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 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. 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>. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Resumo 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. 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. TrackingPage Form Forma Placeholder Espaço reservado <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> 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 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 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 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 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 Users Utilizadores UsersViewStep Users Utilizadores 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: 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 &Known issues &Problemas conhecidos Open release notes website Abrir o site com as notas de lançamento &Release notes &Notas de lançamento <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 %1 suporte About %1 setup Sobre a instalação de %1 About %1 installer Acerca %1 instalador <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/>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. WelcomeQmlViewStep Welcome Bem-vindo WelcomeViewStep Welcome Bem-vindo 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/> 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> 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 Modelo de teclado Layouts Disposições Keyboard Layout Disposição do teclado Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Clique no seu modelo de teclado preferido para selecionar a disposição e a variante, ou utilize o padrão baseado no hardware detectado. Models Modelos Variants Variantes Keyboard Variant Variante do teclado Test your keyboard Teste o seu teclado localeq 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> 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. 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> <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 calamares-3.2.41.1/lang/calamares_ro.ts000066400000000000000000006270761410275732300176370ustar00rootroot00000000000000 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ă. 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) 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: 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 Reincarcă stilul Displays the tree of widget names in the log (for stylesheet debugging). Widget Tree Lista widget Debug information Informație pentru depanare Calamares::ExecutionViewStep Set up Setat Install Instalează 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 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 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”. 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). (%n second(s)) System-requirements checking is complete. Calamares::ViewManager Setup Failed Installation Failed Instalare eșuată Would you like to paste the install log to the web? 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. 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ă CalamaresWindow %1 Setup Program %1 Installer Program de instalare %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'. Programul de instalare nu a putut actualiza tabela de partiții pe discul „%1”. CheckerContainer Gathering system information... Se adună informații despre sistem... ChoicePage Form Formular Select storage de&vice: Selectează dispoziti&vul de stocare: Current: Actual: 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. <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 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 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. 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. Config 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. 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: 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. ContextualProcessJob Contextual Processes Job Job de tip Contextual Process CreatePartitionDialog Create a Partition Creează o partiție Si&ze: Mă&rime: 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 &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. 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”. 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) 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. CreateUserJob Create user %1 Creează utilizatorul %1 Create user <strong>%1</strong>. Creează utilizatorul <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. Ș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. DeviceInfoWidget 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]) 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 DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Editează partiție existentă Content: Conținut: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Punct de montare existent. Vă rugăm alegeţi altul. EncryptWidget Form Formular En&crypt system Sistem de &criptare 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalează bootloader-ul pe <strong>%1</strong>. Setting up mount points. Se setează puncte de montare. 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. FinishedQmlViewStep Finish Termină FinishedViewStep 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”. 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. 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 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> InteractiveTerminalViewStep Script Script KeyboardQmlViewStep Keyboard Tastatură KeyboardViewStep Keyboard Tastatură 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 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. LicenseViewStep License Licență 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. LocalePage Region: Regiune: Zone: Zonă: &Change... S&chimbă LocaleQmlViewStep Location Locație LocaleTests Quit LocaleViewStep Location Locație 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. Generează 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 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 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 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 too few digits Parola contine prea putine caractere The password contains too few uppercase letters Parola contine prea putine majuscule The password contains fewer than %n lowercase letters The password contains too few lowercase letters Parola contine prea putine minuscule The password contains too few non-alphanumeric characters Parola contine prea putine caractere non-alfanumerice The password is too short Parola este prea mica The password does not contain enough character classes Parola nu contine destule clase de caractere The password contains too many same characters consecutively Parola ontine prea multe caractere identice 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 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 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. PackageChooserViewStep Packages PackageModel Name Nume Description Despre Page_Keyboard Form Formular Keyboard Model: Modelul tastaturii: Type here to test your keyboard Tastați aici pentru a testa tastatura Page_UserSetup Form Formular 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 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> 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 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 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. 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. <strong>Erase</strong> disk and install %1. <strong>Șterge</strong> discul și instalează %1. <strong>Replace</strong> a partition with %1. <strong>Înlocuiește</strong> o partiție cu %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set Flag-ul de partiție de sistem pentru EFI nu a fost setat 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Interfață 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. Nu a existat nici o iesire din comanda Output: 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. QObject %1 (%2) %1 (%2) unknown necunoscut 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 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 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 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”. 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: 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 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ă 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. 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. 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. 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. 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. SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Sumar 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. 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. TrackingPage Form Formular Placeholder Substituent <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> 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 Feedback 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 Utilizatori UsersViewStep Users Utilizatori 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: 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 &Known issues &Probleme cunoscute Open release notes website &Release notes &Note asupra ediției <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. WelcomeQmlViewStep Welcome Bine ați venit WelcomeViewStep Welcome Bine ați venit 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_ru.ts000066400000000000000000007315221410275732300176350ustar00rootroot00000000000000 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>, находящийся в начале таблицы разделов (по умолчанию). Процесс автоматизирован, но вы можете выбрать ручной режим, где будете должны настроить его сами. 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 модулей. Ожидание %n модуля(модулей). (%n second(s)) (% секунда) (% секунд) (% секунд) (% секунд) System-requirements checking is complete. Проверка соответствия системным требованиям завершена. Calamares::ViewManager Setup Failed Сбой установки Installation Failed Установка завершилась неудачей Would you like to paste the install log to the web? Разместить журнал установки в интернете? 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. Действительно прервать процесс установки? Программа установки сразу прекратит работу, все изменения будут потеряны. CalamaresPython::Helper Unknown exception type Неизвестный тип исключения unparseable Python error неподдающаяся обработке ошибка Python unparseable Python traceback неподдающийся обработке 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'. Программе установки не удалось обновить таблицу разделов на диске '%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 будет уменьшен до %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> все данные, которые сейчас находятся на выбранном устройстве. <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 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 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.<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. Пожалуйста, выберите продукт из списка. Выбранный продукт будет установлен. ContextualProcessJob Contextual Processes Job Работа с контекстными процессами CreatePartitionDialog Create a Partition Создать раздел Si&ze: Ра&змер: MiB МиБ Partition &Type: &Тип раздела: &Primary &Основной 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. Точка монтирования уже занята. Пожалуйста, выберете другую. 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. Создать новый раздел %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). Create new <strong>%2MiB</strong> partition on <strong>%4</strong> (%3) with file system <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'. 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 Создание пользователя %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>. Создать новую группу томов на диске %1. 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>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) 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++ Job EditExistingPartitionDialog Edit Existing Partition Редактировать существующий раздел Content: Содержит: &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: Mountpoint already in use. Please select another one. Точка монтирования уже занята. Пожалуйста, выберете другую. EncryptWidget Form Форма En&crypt system Система &шифрования Passphrase Пароль Confirm passphrase Подтвердите пароль Please enter the same passphrase in both boxes. Пожалуйста, введите один и тот же пароль в оба поля. 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/>Вы можете перезагрузить компьютер и использовать Вашу новую систему или продолжить работу в 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 Завершить 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>%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'. 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 &ОК 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 Адрес: %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 Ошибка шифрования корневой файловой системы 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> OEMViewStep OEM Configuration Конфигурация OEM 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' Ошибка выделения памяти при установке «%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. Пожалуйста, выберите продукт из списка. Выбранный продукт будет установлен. 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>Введите одинаковый пароль дважды, это необходимо для исключения ошибок. Хороший пароль состоит из смеси букв, цифр и знаков пунктуации; должен иметь длину от 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 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 Разделы 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). Установить %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Для запуска %1 необходим системный раздел EFI.<br/><br/>Чтобы его настроить, вернитесь и выберите или создайте раздел FAT32 с установленным флагом <strong>%3</strong> и точкой монтирования <strong>%2</strong>.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Для запуска %1 необходим системный раздел EFI.<br/><br/>Был настроен раздел с точкой монтирования <strong>%2</strong>, но у него отсутствует флаг <strong>%3</strong>.<br/>Чтобы установить флаг, вернитесь и отредактируйте раздел.<br/><br/>Можно продолжить и без установки флага, но ваша система может не загрузиться. EFI system partition flag not set Не установлен флаг системного раздела 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 - наилучший вариант для всех систем. Этот установщик позволяет использовать таблицу разделов GPT для систем с BIOS. <br/> <br/> Чтобы установить таблицу разделов как GPT (если это еще не сделано) вернитесь назад и создайте таблицу разделов GPT, затем создайте 8 МБ Не форматированный раздел с включенным флагом <strong> bios-grub</strong> </ 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. Нет разделов для установки. PlasmaLnfJob Plasma Look-and-Feel Job 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 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 Удалить live пользователя из целевой системы 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.<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> 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>%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'. 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> Этот компьютер не соответствует минимальным требованиям для установки %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 Разметка 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. Снять флаги %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. 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. 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) SummaryPage 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. Это обзор изменений, которые будут применены при запуске процедуры установки. SummaryViewStep Summary Итог TrackingInstallJob Installation feedback Отчёт об установке Sending installation feedback. Отправка отчёта об установке. Internal error in install-tracking. Внутренняя ошибка в install-tracking. HTTP request timed out. Тайм-аут запроса HTTP. TrackingKUserFeedbackJob KDE user feedback Отзывы пользователей KDE 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. Не удалось настроить отзывы о компьютере, ошибка 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><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. 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 Отзывы 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: 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/>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 Добро пожаловать WelcomeViewStep Welcome Добро пожаловать 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> 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 Модель клавиатуры Layouts Keyboard Layout Раскладка клавиатуры Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Модели Variants Варианты Keyboard Variant Вариант клавиатуры Test your keyboard Проверьте свою клавиатуру localeq Change Изменить notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Это пример заметок о выпуске..</p> 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 Пожертвовать calamares-3.2.41.1/lang/calamares_ru_RU.ts000066400000000000000000005603041410275732300202410ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_si.ts000066400000000000000000005573131410275732300176260ustar00rootroot00000000000000 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) %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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_sk.ts000066400000000000000000007031341410275732300176220ustar00rootroot00000000000000 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>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. 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) Calamares::BlankViewStep Blank Page Prázdna stránka Calamares::DebugWindow Form Forma GlobalStorage Globálne úložisko JobQueue Fronta úloh Modules Moduly Type: Typ: none žiadny Interface: Rozhranie: 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 Calamares::ExecutionViewStep Set up Inštalácia Install Inštalácia Calamares::FailJob Job failed (%1) Úloha zlyhala (%1) Programmed job failure was explicitly requested. Zlyhanie naprogramovanej úlohy bolo výlučne vyžiadané. Calamares::JobThread Done Hotovo Calamares::NamedJob Example job (%1) Vzorová úloha (%1) 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 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“. 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. Čaká sa na %n moduly. Čaká sa na %n modulov. Čaká sa na %n modulov. (%n second(s)) (%n sekunda) (%n sekundy) (%n sekúnd) (%n sekúnd) System-requirements checking is complete. Kontrola systémových požiadaviek je dokončená. Calamares::ViewManager Setup Failed Inštalácia zlyhala Installation 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? 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ť 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é. 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. CalamaresWindow %1 Setup Program Inštalačný program distribúcie %1 %1 Installer Inštalátor distribúcie %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'. Inštalátor zlyhal pri aktualizovaní tabuľky oddielov na disku „%1“. CheckerContainer Gathering system information... Zbierajú sa informácie o počítači... ChoicePage Form Forma Select storage de&vice: Vyberte úložné &zariadenie: Current: Teraz: 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í. <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 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 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. 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é. Config 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. 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) 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ý. ContextualProcessJob Contextual Processes Job Úloha kontextových procesov CreatePartitionDialog Create a Partition Vytvorenie oddielu Si&ze: Veľ&kosť: 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 &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ý. 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“. 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) 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. CreateUserJob Create user %1 Vytvoriť používateľa %1 Create user <strong>%1</strong>. Vytvoriť používateľa <strong>%1</strong>. Preserving home directory Uchováva sa domovský adresár Creating user %1 Vytvára sa používateľ %1 Configuring user %1 Nastavuje sa používateľ %1 Setting file permissions Nastavujú sa oprávnenia súborov CreateVolumeGroupDialog Create Volume Group Vytvoriť skupinu zväzkov 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“. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Fiktívna úloha jazyka C++ EditExistingPartitionDialog Edit Existing Partition Úprava existujúceho oddielu Content: Obsah: &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: Label for the filesystem Menovka systému súborov FS Label: Menovka SS: Mountpoint already in use. Please select another one. Bod pripojenia sa už používa. Prosím, vyberte iný. EncryptWidget Form Forma En&crypt system &Zašifrovať systém Passphrase Heslo Confirm passphrase Potvrdenie hesla Please enter the same passphrase in both boxes. Prosím, zadajte rovnaké heslo do oboch polí. FillGlobalStorageJob Set partition information Nastaviť informácie o oddieli Install %1 on <strong>new</strong> %2 system partition with features <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> 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>. Inštalovať distribúciu %2 na %3 systémovom oddieli <strong>%1</strong>. Install boot loader on <strong>%1</strong>. Inštalovať zavádzač do <strong>%1</strong>. Setting up mount points. Nastavujú sa body pripojení. 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. FinishedQmlViewStep Finish Dokončenie FinishedViewStep 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“. 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. HostInfoJob Collecting information about your machine. Zbieranie informácií o vašom počítači. 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>. InitcpioJob Creating initramfs with mkinitcpio. Vytvára sa initramfs pomocou mkinitcpio. InitramfsJob Creating initramfs. Vytvára sa initramfs. 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Klávesnica KeyboardViewStep Keyboard Klávesnica 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 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. LicenseViewStep License Licencia 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. LocalePage Region: Oblasť: Zone: Zóna: &Change... Z&meniť... LocaleQmlViewStep Location Umiestnenie LocaleTests Quit Ukončiť LocaleViewStep Location Umiestnenie 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. 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 NotesQmlViewStep Notes Poznámky 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> 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 too few digits Heslo tiež obsahuje pár číslic The password contains too few uppercase letters Heslo obsahuje príliš málo veľký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 too few non-alphanumeric characters Heslo obsahuje príliš málo nealfanumerických znakov The password is too short Heslo je príliš krátke The password does not contain enough character classes Heslo neobsahuje dostatok tried znakov The password contains too many same characters consecutively Heslo obsahuje príliš veľa rovnakých znakov 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 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 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ý. PackageChooserViewStep Packages Balíky PackageModel Name Názov Description Popis 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 Page_UserSetup Form Forma 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 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. 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> 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 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ť 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ť. 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. <strong>Erase</strong> disk and install %1. <strong>Vymazanie</strong> disku a inštalácia distribúcie %1. <strong>Replace</strong> a partition with %1. <strong>Nahradenie</strong> oddielu distribúciou %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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>%3</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ť. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 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>%3</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ť. EFI system partition flag not set Príznak oddielu systému EFI nie je nastavený 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. 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. 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 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. PlasmaLnfViewStep Look-and-Feel Vzhľad a dojem 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é. ProcessResult There was no output from the command. Žiadny výstup z príkazu. Output: 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. QObject %1 (%2) %1 (%2) unknown neznámy 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 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“. 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ť. 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“. ResizeVolumeGroupDialog Resize Volume Group Zmeniť veľkosť skupiny zväzkov 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“. 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 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 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. 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>. 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. 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Súhrn 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. 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. TrackingPage Form Forma Placeholder Zástupný text <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> 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. 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 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 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 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 Users Používatelia UsersViewStep Users Používatelia 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: 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 &Known issues &Známe problémy Open release notes website Otvoriť webovú stránku s poznámkami k vydaniu &Release notes &Poznámky k vydaniu <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/>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 WelcomeViewStep Welcome Uvítanie 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/> pre distribúciu %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 podporovaný spoločnosťou <br/> <a href='http://www.blue-systems.com/'>Blue Systems</a> - 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> 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äť keyboardq Keyboard Model Model klávesnice Layouts Rozloženia Keyboard Layout Rozloženie klávesnice Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Kliknutím na preferovaný model klávesnice vyberiete rozloženie, alebo použite predvolený, ktorý bol vybraný podľa rozpoznaného hardvéru. Models Modely Variants Varianty Keyboard Variant Varianta klávesnice Test your keyboard Vyskúšajte vašu klávesnicu localeq Change Zmeniť notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Toto sú vzorové poznámky k vydaniu.</p> 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. 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. 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ť calamares-3.2.41.1/lang/calamares_sl.ts000066400000000000000000005654361410275732300176360ustar00rootroot00000000000000 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 Zagonski razdelek System Partition Sistemski razdelek Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form Oblika GlobalStorage JobQueue Modules Type: Vrsta: 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 Namesti Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Končano 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 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". 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 Namestitev je spodletela Would you like to paste the install log to the web? 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. CalamaresPython::Helper Unknown exception type Neznana vrsta izjeme unparseable Python error nerazčlenljiva napaka Python unparseable Python traceback Unfetchable Python error. CalamaresWindow %1 Setup Program %1 Installer %1 Namestilnik 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'. Namestilniku ni uspelo posodobiti razpredelnice razdelkov na disku '%1'. CheckerContainer Gathering system information... Zbiranje informacij o sistemu ... ChoicePage Form Oblika Select storage de&vice: Current: 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. <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 Clear mounts for partitioning operations on %1 Clearing mounts for partitioning operations on %1. Cleared all mounts for %1 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. 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/> 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Ustvari razdelek Si&ze: Ve&likost MiB Partition &Type: &Vrsta razdelka: &Primary &Primaren 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. 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'. 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) 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. CreateUserJob Create user %1 Ustvari uporabnika %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. Namestilniku ni uspelo izbrisati razdelka %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]) 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 Uredi obstoječi razdelek Content: Vsebina: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. EncryptWidget Form Oblika En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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> 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 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. FinishedQmlViewStep Finish Končano FinishedViewStep 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'. 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. 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 Tipkovnica KeyboardViewStep Keyboard Tipkovnica 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 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. 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: Območje: Zone: Časovni pas: &Change... LocaleQmlViewStep Location Položaj LocaleTests Quit LocaleViewStep Location Položaj 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 Oblika Product Name TextLabel Long Product Description Package Selection Please pick a product from the list. The selected product will be installed. PackageChooserViewStep Packages PackageModel Name Ime Description Page_Keyboard Form Oblika Keyboard Model: Model tipkovnice: Type here to test your keyboard Tipkajte tukaj za testiranje tipkovnice Page_UserSetup Form Oblika 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 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> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition Nov razdelek %1 %2 size[number] filesystem[name] 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 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. PartitionViewStep Gathering system information... Zbiranje informacij o sistemu ... Partitions Razdelki Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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: 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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. 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. 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. QObject %1 (%2) unknown 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 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 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 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: 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 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary Povzetek 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 Oblika 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 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 Oblika 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 Dobrodošli WelcomeViewStep Welcome Dobrodošli 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_sq.ts000066400000000000000000007055521410275732300176360ustar00rootroot00000000000000 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ë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ë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) Calamares::BlankViewStep Blank Page Faqe e Zbrazët Calamares::DebugWindow Form Formular GlobalStorage GlobalStorage JobQueue Radhë Aktesh Modules Module Type: Lloj: none asnjë Interface: Ndërfaqe: 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 Calamares::ExecutionViewStep Set up Ujdise Install 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. Calamares::JobThread Done U bë Calamares::NamedJob Example job (%1) Shembull akti (%1) 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 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\". 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). Po pritet për %n modul(e). (%n second(s)) (%n sekondë(a)) (%n sekondë(a)) System-requirements checking is complete. Kontrolli i domosdoshmërive të sistemit u plotësua. Calamares::ViewManager Setup Failed Rregullimi Dështoi Installation Failed Instalimi Dështoi Would you like to paste the install log to the web? Do të donit të hidhet në web regjistri i instalimit? 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 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. 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. CalamaresWindow %1 Setup Program Programi i Rregullimit të %1 %1 Installer Instalues %1 ChangeFilesystemLabelJob 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… ChoicePage Form Formular Select storage de&vice: Përzgjidhni &pajisje depozitimi: Current: E tanishmja: 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ë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ë 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. <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 Clear mounts for partitioning operations on %1 Hiqi montimet për veprime pjesëtimi te %1 Clearing mounts for partitioning operations on %1. Po hiqen montimet për veprime pjesëtimi te %1. Cleared all mounts for %1 U hoqën krejt montimet për %1 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. 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. Config 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. 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. (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. ContextualProcessJob Contextual Processes Job Akt Procesesh Kontekstuale CreatePartitionDialog Create a Partition Krijoni një Pjesë Si&ze: &Madhësi: MiB MiB Partition &Type: &Lloj Pjese: &Primary &Parësore 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. 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'. 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) 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). 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. CreateUserJob Create user %1 Krijo përdoruesin %1 Create user <strong>%1</strong>. Krijo përdoruesin <strong>%1</strong>. Preserving home directory S’po preket drejtoria shtëpi Creating user %1 Po krijohet përdoruesi %1 Configuring user %1 Po formësohet përdoruesi %1 Setting file permissions Po ujdisen leje mbi kartela CreateVolumeGroupDialog Create Volume Group Krijoni Grup Volumesh 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'. 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. 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. DeviceInfoWidget 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ë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) 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 DummyCppJob Dummy C++ Job Akt C++ Dummy EditExistingPartitionDialog Edit Existing Partition Përpuno Pjesën Ekzistuese Content: Lëndë: &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: Parametra: Label for the filesystem Etiketë për sistemin e kartelave FS Label: Etiketë FS-je: Mountpoint already in use. Please select another one. Pikë montimi tashmë e përdorur. Ju lutemi, përzgjidhni një tjetër. EncryptWidget Form Formular En&crypt system &Fshehtëzoje sistemin 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. 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> 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>. Install boot loader on <strong>%1</strong>. Instalo ngarkues nisjesh në <strong>%1</strong>. Setting up mount points. Po rregullohen pika montimesh. 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ë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'. 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. HostInfoJob Collecting information about your machine. Po grumbullohen të dhëna rreth makinës tuaj. 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>. InitcpioJob Creating initramfs with mkinitcpio. Po krijohet initramfs me mkinitcpio. InitramfsJob Creating initramfs. Po krijohet initramfs. 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> InteractiveTerminalViewStep Script Programth KeyboardQmlViewStep Keyboard Tastierë KeyboardViewStep Keyboard Tastierë 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 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. LicenseViewStep License Licencë 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. LocalePage Region: Rajon: Zone: Zonë: &Change... &Ndryshojeni… LocaleQmlViewStep Location Vendndodhje LocaleTests Quit Dil LocaleViewStep Location Vendndodhje 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. 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 NotesQmlViewStep Notes Shënime 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> 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 too few digits Fjalëkalimi përmban shumë pak shifra The password contains too few uppercase letters Fjalëkalimi përmban pak shkronja të mëdha 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 too few non-alphanumeric characters Fjalëkalimi përmban pak shenja jo alfanumerike The password is too short Fjalëkalimi është shumë i shkurtër The password does not contain enough character classes Fjalëkalimi nuk përmban klasa të mjaftueshme shenjash 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 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 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 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. PackageChooserViewStep Packages Paketa PackageModel Name Emër Description Përshkrim Page_Keyboard Form Formular Keyboard Model: Model Tastiere: Type here to test your keyboard Që të provoni tastierën tuaj, shtypni këtu Page_UserSetup Form Formular 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 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> 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 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 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ë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. <strong>Erase</strong> disk and install %1. <strong>Fshije</strong> diskun dhe instalo %1. <strong>Replace</strong> a partition with %1. <strong>Zëvendësojeni</strong> një pjesë me %1. <strong>Manual</strong> partitioning. Pjesëtim <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ëtim <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Një pjesë EFI sistemi është e nevojshme për nisjen e %1.<br/><br/>Që të formësoni një pjesë EFI sistemi, kthehuni mbrapsht dhe përzgjidhni ose krijoni një sistem kartelash FAT32 me parametrin <strong>%3</strong> të aktivizuar dhe me pikë montimi <strong>%2</strong>.<br/><br/>Mund të vazhdoni pa ujdisur një pjesë EFI sistemi, por nisja nën sistemi juaj mund të dështojë. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Një pjesë EFI sistemi është e nevojshme për nisjen e %1.<br/><br/>Qe formësuar një pikë montimi <strong>%2</strong>, por parametri <strong>%3</strong> për të s’është ujdisur.<br/>Për të ujdisur parametrin, kthehuni mbrapsht dhe përpunoni pjesën.<br/><br/>Mund të vazhdoni pa ujdisur një pjesë EFI sistemi, por nisja nën sistemin tuaj mund të dështojë. EFI system partition flag not set S’i është vënë parametër pjese EFI sistemi 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. 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. PlasmaLnfJob Plasma Look-and-Feel Job Akt Plasma Pamje-dhe-Ndjesi Could not select KDE Plasma Look-and-Feel package 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. PlasmaLnfViewStep Look-and-Feel Pamje-dhe-Ndjesi 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. ProcessResult There was no output from the command. S’pati përfundim nga urdhri. Output: 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. QObject %1 (%2) %1 (%2) unknown e panjohur 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 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'. 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 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ë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 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 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 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'. ResizeVolumeGroupDialog Resize Volume Group Ripërmaso Grup Vëllimesh 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'. 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ë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 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. SetPartFlagsJob Set flags on partition %1. Vendos parametra në pjesën %1. Set flags on %1MiB %2 partition. Vendos parametra në pjesën %1MiB %2. Set flags on new partition. Vendos parametra në pjesë të re. Clear flags on partition <strong>%1</strong>. Hiqi parametrat te ndarja <strong>%1</strong>. Clear flags on %1MiB <strong>%2</strong> partition. 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 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 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>%1</strong> on new partition. 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ë 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. 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. SummaryViewStep Summary Përmbledhje 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. 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. TrackingPage Form Formular Placeholder Vendmbajtëse <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> 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 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 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 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 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 Users Përdorues UsersViewStep Users Përdorues 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: 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 &Known issues &Probleme të njohura Open release notes website Hapni sajtin e shënimeve mbi hedhjet në qarkullim &Release notes Shënime &versioni <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/>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 WelcomeViewStep Welcome Mirë se vini 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/> 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 <a href='https://calamares.io/team/'>ekipit Calamares</a> dhe <a href='https://www.transifex.com/calamares/calamares/'>ekipit të 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. 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> 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 keyboardq Keyboard Model Model Tastiere Layouts Skema Keyboard Layout Skemë Tastiere Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Klikoni mbi modelin tuaj të parapëlqyer të tastierës që të përzgjidhni skemën dhe variantin, ose përdorni atë parazgjedhje bazuar në tastierën e pikasur nga programi. Models Modele Variants Variante Keyboard Variant Variant Tastiere Test your keyboard Testoni tastierën tuaj localeq Change Ndryshojeni notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Ky është një shembull shënimesh hedhjeje në qarkullim.</p> 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 calamares-3.2.41.1/lang/calamares_sr.ts000066400000000000000000005674631410275732300176460ustar00rootroot00000000000000 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) %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". Boost.Python грешка у послу „%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 Инсталација није успела Would you like to paste the install log to the web? 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 %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'. Инсталација није успела да ажурира табелу партиција на диску '%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. <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 Clear mounts for partitioning operations on %1 Уклони тачке припајања за операције партиције на %1 Clearing mounts for partitioning operations on %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 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. 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. Име вашег "домаћина" - 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Направи партицију Si&ze: Вели&чина MiB Partition &Type: &Тип партиције &Primary &Примарна 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. 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'. 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) 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. CreateUserJob Create user %1 Направи корисника %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 Content: Садржај: &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: Mountpoint already in use. Please select another one. EncryptWidget Form Форма En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 Системски захтеви 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 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. Није могуће променити мод (chmod) над "судоерс" фајлом Cannot create sudoers file for writing. ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary Сажетак 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 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 %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 Добродошли 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_sr@latin.ts000066400000000000000000005644011410275732300207630ustar00rootroot00000000000000 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 Master Boot Record na %1 Boot Partition Particija za pokretanje sistema System Partition Sistemska particija Do not install a boot loader %1 (%2) Calamares::BlankViewStep Blank Page Calamares::DebugWindow Form GlobalStorage JobQueue Modules Type: Vrsta: 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 Instaliraj Calamares::FailJob Job failed (%1) Programmed job failure was explicitly requested. Calamares::JobThread Done Gotovo 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 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 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 Neuspješna instalacija Would you like to paste the install log to the web? 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. 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. CalamaresWindow %1 Setup Program %1 Installer %1 Instaler 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'. Instaler ne može promjeniti tabelu particija na disku '%1'. CheckerContainer Gathering system information... ChoicePage Form Select storage de&vice: Current: 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. <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 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 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 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! 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Kreiraj particiju Si&ze: Veli&čina MiB Partition &Type: &Tip particije &Primary &Primarna 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. 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'. 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) 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. CreateUserJob Create user %1 Napravi korisnika %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. Instaler nije uspjeo obrisati particiju %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]) 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 Promjeni postojeću particiju: Content: Sadržaj: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 Završi FinishedViewStep 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'. 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. 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 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 &Prekini &OK 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: Regija: Zone: Zona: &Change... LocaleQmlViewStep Location Lokacija LocaleTests Quit LocaleViewStep Location Lokacija 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. PackageChooserViewStep Packages PackageModel Name Naziv Description Page_Keyboard Form Keyboard Model: Model tastature: Type here to test your keyboard Test tastature Page_UserSetup Form 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 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> PartitionLabelsView Root Home Boot EFI system Swap New partition for %1 New partition Nova particija %1 %2 size[number] filesystem[name] PartitionModel Free Space Slobodan prostor New partition Nova particija Name Naziv File System Fajl sistem File System Label Mount Point Size Veličina 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. PartitionViewStep Gathering system information... Partitions Particije Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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: 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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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. 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. 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. 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'. 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: 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 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 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. Nemoguće uraditi chmod nad sudoers fajlom. Cannot create sudoers file for writing. Nemoguće napraviti sudoers fajl ShellProcessJob Shell Processes Job SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary Izveštaj 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 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 Korisnici UsersViewStep Users Korisnici 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: 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 Dobrodošli WelcomeViewStep Welcome Dobrodošli 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_sv.ts000066400000000000000000006766361410275732300176550ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Tom sida Calamares::DebugWindow Form Form GlobalStorage GlobalStorage JobQueue JobQueue Modules Moduler Type: Typ: none ingen Interface: Gränssnitt: 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 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 Calamares::ExecutionViewStep Set up Inställningar Install Installera Calamares::FailJob Job failed (%1) Uppgiften misslyckades (%1) Programmed job failure was explicitly requested. Programmerat jobbfel begärdes uttryckligen. Calamares::JobThread Done Klar Calamares::NamedJob Example job (%1) Exempel jobb (%1) 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 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". 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). Väntar på %n modul(er). (%n second(s)) (%n sekund(er)) (%n sekund(er)) System-requirements checking is complete. Kontroll av systemkrav är färdig Calamares::ViewManager Setup Failed Inställningarna misslyckades Installation Failed Installationen misslyckades Would you like to paste the install log to the web? Vill du ladda upp installationsloggen på webben? 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. 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 CalamaresWindow %1 Setup Program %1 Installationsprogram %1 Installer %1-installationsprogram ChangeFilesystemLabelJob 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... ChoicePage Form Formulär Select storage de&vice: Välj lagringsenhet: Current: Nuvarande: 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. <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 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 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 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 rootMountPoint ä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. Config 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. 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) 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. ContextualProcessJob Contextual Processes Job Kontextuellt processjobb CreatePartitionDialog Create a Partition Skapa en partition Si&ze: Storlek: MiB MiB Partition &Type: Partitions&typ: &Primary &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. 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'. 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) 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. CreateUserJob Create user %1 Skapar användare %1 Create user <strong>%1</strong>. Skapa användare <strong>%1</strong>. Preserving home directory Bevara hemkatalogen Creating user %1 Skapar användare %1 Configuring user %1 Konfigurerar användare %1 Setting file permissions Ställer in filbehörigheter CreateVolumeGroupDialog Create Volume Group Skapa volymgrupp 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'. 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. 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. DeviceInfoWidget 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) 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 DummyCppJob Dummy C++ Job Exempel C++ jobb EditExistingPartitionDialog Edit Existing Partition Ändra befintlig partition Content: Innehå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: Label for the filesystem Etikett för filsystem FS Label: FS Etikett: Mountpoint already in use. Please select another one. Monteringspunkt används redan. Välj en annan. EncryptWidget Form Form En&crypt system Kryptera system 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. 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> 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>. Install boot loader on <strong>%1</strong>. Installera uppstartshanterare på <strong>%1</strong>. Setting up mount points. Ställer in monteringspunkter. 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 FinishedQmlViewStep Finish Slutför FinishedViewStep 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'. 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. HostInfoJob Collecting information about your machine. Samlar in information om din maskin. 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>. InitcpioJob Creating initramfs with mkinitcpio. Skapar initramfs med mkinitcpio. InitramfsJob Creating initramfs. Skapar initramfs. 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> InteractiveTerminalViewStep Script Skript KeyboardQmlViewStep Keyboard Tangentbord KeyboardViewStep Keyboard Tangentbord 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 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 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. LocalePage Region: Region: Zone: Zon: &Change... Ändra... LocaleQmlViewStep Location Plats LocaleTests Quit Avsluta LocaleViewStep Location Plats 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. 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 NotesQmlViewStep Notes Anteckningar 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> 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 too few digits Lösenordet innehåller för få siffror The password contains too few uppercase letters Lösenordet innehåller för få stora 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 too few non-alphanumeric characters Lösenordet innehåller för få icke-alfanumeriska tecken The password is too short Detta lösenordet är för kort The password does not contain enough character classes Lösenordet innehåller inte tillräckligt många teckenklasser The password contains too many same characters consecutively Lösenordet innehåller för många liknande tecken efter varandra 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 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 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. PackageChooserViewStep Packages Paket PackageModel Name Namn Description Beskrivning Page_Keyboard Form Form Keyboard Model: Tangentbordsmodell: Type here to test your keyboard Skriv här för att testa ditt tangentbord Page_UserSetup Form Form 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 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> 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 PartitionModel Free Space Ledigt utrymme New partition Ny partition Name Namn File System Filsystem File System Label Filsystem etikett Mount Point Monteringspunkt Size Storlek 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. <strong>Erase</strong> disk and install %1. <strong>Rensa</strong> disken och installera %1. <strong>Replace</strong> a partition with %1. <strong>Ersätt</strong> en partition med %1. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 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 FAT32-filsystem med <strong>%3</strong>-flaggan satt och monteringspunkt <strong>%2</strong>. <br/><br/>Du kan fortsätta utan att ställa in en EFI-systempartition, men ditt system kanske misslyckas med att starta. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. En EFI-systempartition krävs för att starta %1. <br/><br/>En partition är konfigurerad med monteringspunkt <strong>%2</strong>, men dess <strong>%3</strong>-flagga är inte satt.<br/>För att sätta flaggan, gå tillbaka och redigera partitionen.<br/><br/>Du kan fortsätta utan att sätta flaggan, men ditt system kanske misslyckas med att starta EFI system partition flag not set EFI system partitionsflagga inte satt 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. En GPT-partitionstabell är det bästa alternativet för alla system. Detta installationsprogram stödjer det för system med BIOS också.<br/><br/>För att konfigurera en GPT-partitionstabell på BIOS (om det inte redan är gjort), gå tillbaka och sätt partitionstabell till GPT, skapa sedan en oformaterad partition på 8MB med <strong>bios_grub</strong>-flaggan satt.<br/><br/>En oformaterad partition på 8MB är nödvändig 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å. 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. ProcessResult There was no output from the command. Det kom ingen utdata från kommandot. Output: 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. QObject %1 (%2) %1 (%2) unknown okänd 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 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'. 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: Requirements <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'. ResizeVolumeGroupDialog Resize Volume Group Ändra storlek på volymgrupp 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'. 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 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 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. 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. 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. 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. 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 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. SummaryViewStep Summary Översikt 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. 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. TrackingPage Form Form Placeholder Platshållare <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> 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 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 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 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 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 Users Användare UsersViewStep Users Användare 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 &Known issues &Kända problem Open release notes website Besök webbplatsen för versionsinformation &Release notes Versionsinformation, &R <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. <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 WelcomeViewStep Welcome Välkommen 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/> 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> 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 keyboardq Keyboard Model Tangentbordsmodell Layouts Layouter Keyboard Layout Tangentbordslayout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Välj din föredragna tangentbordsmodell för att välja layout och variant, eller använd ett förval baserat på vilken hårdvara vi känt av. Models Modeller Variants Varianter Keyboard Variant Tangentbordsvariant Test your keyboard Testa ditt tangentbord localeq Change Ändra notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Detta är exempel versionsinformation. 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 calamares-3.2.41.1/lang/calamares_te.ts000066400000000000000000005677331410275732300176320ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_tg.ts000066400000000000000000007654321410275732300176300ustar00rootroot00000000000000 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 Насбкунӣ қатъ шуд Would you like to paste the install log to the web? Шумо мехоҳед, ки сабти рӯйдодҳои насбро ба шабака нусха бардоред? 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 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. Фармон дар муҳити мизбон иҷро мешавад ва бояд масири реша (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. Лутфан, маҳсулеро аз рӯйхат интихоб намоед. Маҳсули интихобшуда насб карда мешавад. ContextualProcessJob Contextual Processes Job Вазифаи равандҳои мазмунӣ CreatePartitionDialog Create a Partition Эҷод кардани қисми диск Si&ze: &Андоза: MiB МБ Partition &Type: &Навъи қисми диск: &Primary &Асосӣ 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. Нуқтаи васл аллакай дар истифода аст. Лутфан, нуқтаи васли дигареро интихоб намоед. 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 Таҳрир кардани қисми диски мавҷудбуда Content: Муҳтаво: &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: Mountpoint already in use. Please select another one. Нуқтаи васл аллакай дар истифода аст. Лутфан, нуқтаи васли дигареро интихоб намоед. EncryptWidget Form Шакл En&crypt system &Рамзгузории низом Passphrase Гузарвожаро ворид намоед Confirm passphrase Гузарвожаро тасдиқ намоед Please enter the same passphrase in both boxes. Лутфан, гузарвожаи ягонаро дар ҳар дуи сатр ворид намоед. 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 &ХУБ 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. Лутфан, маҳсулеро аз рӯйхат интихоб намоед. Маҳсули интихобшуда насб карда мешавад. 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 Қисмҳои диск 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). Низоми %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Қисми диски низомии EFI барои оғоз кардани %1 лозим аст.<br/><br/>Барои танзим кардани қисми диски низомии EFI, ба қафо гузаред ва низоми файлии FAT32-ро бо нишони фаъолшудаи <strong>%3</strong> ва нуқтаи васли <strong>%2</strong> интихоб кунед ё эҷод намоед.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Қисми диски низомии EFI барои оғоз кардани %1 лозим аст.<br/><br/>Қисми диск бо нуқтаи васли <strong>%2</strong> танзим карда шуд, аммо нишони он бо имкони <strong>%3</strong> танзим карда нашуд.<br/>Барои танзим кардани нишон ба қафо гузаред ва қисми дискро таҳрир кунед.<br/><br/>Шумо метавонед бе танзимкунии нишон идома диҳед, аммо низоми шумо метавонад оғоз карда нашавад. EFI system partition flag not set Нишони қисми диск дар низоми 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 лозим аст. 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 Талаботи низом 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 Қисмбандии диск 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 SummaryPage 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. Дар ин ҷамъбаст шумо мебинед, ки чӣ мешавад пас аз он ки шумо раванди насбкуниро оғоз мекунед. SummaryViewStep Summary Ҷамъбаст 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 Изҳори назар ва алоқаи бозгашт 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 Хуш омадед 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> 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 Намунаи клавиатура Layouts Тарҳбандиҳо Keyboard Layout Тарҳбандии клавиатура Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Намунаи клавиатураи пазируфтаи худро барои танзими тарҳбандӣ ва варианти он интихоб кунед ё клавиатураи муқаррареро дар асоси сахтафзори муайяншуда истифода баред. Models Намунаҳо Variants Имконот Keyboard Variant Вариантҳои клавиатура Test your keyboard Клавиатураи худро санҷед localeq Change Тағйир додан notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Матни намунавии қайдҳои нашр.</p> 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 Саҳмгузорӣ calamares-3.2.41.1/lang/calamares_th.ts000066400000000000000000006355111410275732300176230ustar00rootroot00000000000000 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 Master Boot Record ของ %1 Boot Partition พาร์ทิชันบูต System Partition พาร์ทิชันระบบ Do not install a boot loader ไม่ต้องติดตั้งบูตโหลดเดอร์ %1 (%2) %1 (%2) Calamares::BlankViewStep Blank Page หน้าว่าง Calamares::DebugWindow Form ฟอร์ม GlobalStorage GlobalStorage JobQueue JobQueue Modules 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 สำหรับ 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>. 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. Calamares::ViewManager Setup Failed Installation Failed การติดตั้งล้มเหลว Would you like to paste the install log to the web? 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 &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. คุณต้องการยกเลิกกระบวนการติดตั้งที่กำลังดำเนินการอยู่หรือไม่? ตัวติดตั้งจะสิ้นสุดการทำงานและไม่บันทึกการเปลี่ยนแปลงที่ได้ดำเนินการก่อนหน้านี้ CalamaresPython::Helper Unknown exception type ข้อผิดพลาดไม่ทราบประเภท unparseable Python error ข้อผิดพลาด unparseable Python unparseable Python traceback ประวัติย้อนหลัง unparseable Python Unfetchable Python error. ข้อผิดพลาด Unfetchable Python 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'. ตัวติดตั้งไม่สามารถอัพเดทตารางพาร์ทิชันบนดิสก์ '%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. <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> <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>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 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 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> คอมพิวเตอร์เครื่องนี้มีความต้องการไม่เพียงพอที่จะตั้งค่า %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. เลือกผลิตภัณฑ์จากรายการ ผลิตภัณฑ์ที่เลือกไว้จะถูกติดตั้ง ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition สร้างพาร์ทิชัน Si&ze: &Z ขนาด: MiB Partition &Type: &T พาร์ทิชันและประเภท: &Primary &P หลัก 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. 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' 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) 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 กำลังสร้างผู้ใช้ %1 Configuring user %1 กำลังกำหนดค่าผู้ใช้ %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. 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]) 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 EditExistingPartitionDialog Edit Existing Partition แก้ไขพาร์ทิชันที่มีอยู่เดิม Content: เนื้อหา: &Keep &เก็บไว้ Format ฟอร์แมท Warning: Formatting the partition will erase all existing data. คำเตือน: การฟอร์แมทพาร์ทิชันจะลบข้อมูลที่มีอยู่เดิมทั้งหมด &Mount Point: &M จุดเชื่อมต่อ: Si&ze: &Z ขนาด: MiB Fi&le System: Flags: Flags: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. EncryptWidget Form ฟอร์ม En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 &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) ต่อไป <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 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'. ตัวติดตั้งไม่สามารถฟอร์แมทพาร์ทิชัน %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 เชื่อมต่อกับอินเทอร์เน็ต 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 ไม่ได้ติดตั้ง Konsole 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 &C ยกเลิก &OK &O ตกลง 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 ไฟล์: %1 Hide license text Show the license text Open license agreement in browser. LocalePage Region: ภูมิภาค: Zone: โซน: &Change... &C เปลี่ยนแปลง... 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 เขตเวลา: %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 เขตเวลา: %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. เลือกผลิตภัณฑ์จากรายการ ผลิตภัณฑ์ที่เลือกไว้จะถูกติดตั้ง 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>ใส่รหัสผ่านเดียวกันซ้ำ 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> 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 &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. PartitionViewStep Gathering system information... กำลังรวบรวมข้อมูลของระบบ... Partitions พาร์ทิชัน Install %1 <strong>alongside</strong> another operating system. ติดตั้ง %1 <strong>ควบคู่</strong>กับระบบปฏิบัติการเดิม <strong>Erase</strong> disk and install %1. <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) ดิสก์ <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 บนพาร์ทิชัน 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 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' 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 ความต้องการของระบบ 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. 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 SetHostNameJob Set hostname %1 ตั้งค่าชื่อโฮสต์ %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 ตั้งค่าโมเดลแป้นพิมพ์เป็น %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. 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 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 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) SummaryPage 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. SummaryViewStep Summary สาระสำคัญ 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 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 &A เกี่ยวกับ Open donations website &Donate Open help and support website เปิดเว็บไซต์ช่วยเหลือและสนับสนุน &Support &S ช่วยเหลือ Open issues and bug-tracking website &Known issues &K ปัญหาที่รู้จัก 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 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 ยินดีต้อนรับ 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard ทดสอบคีย์บอร์ด localeq Change เปลี่ยน notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_tr_TR.ts000066400000000000000000006774051410275732300202520ustar00rootroot00000000000000 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. 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) Calamares::BlankViewStep Blank Page Boş Sayfa Calamares::DebugWindow Form Biçim GlobalStorage KüreselDepo JobQueue İşKuyruğu Modules Eklentiler Type: Tipi: none hiçbiri Interface: Arayüz: 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 Calamares::ExecutionViewStep Set up Kur Install Sistem Kuruluyor Calamares::FailJob Job failed (%1) İş hatası (%1) Programmed job failure was explicitly requested. Programlanmış iş arızası açıkça istendi. Calamares::JobThread Done Sistem kurulumu tamamlandı, kurulum aracından çıkabilirsiniz. Calamares::NamedJob Example job (%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 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". 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. %n modül(leri) bekleniyor. (%n second(s)) (%n saniye(ler)) (%n saniye(ler)) System-requirements checking is complete. Sistem gereksinimleri kontrolü tamamlandı. Calamares::ViewManager Setup Failed Kurulum Başarısız Installation Failed Kurulum Başarısız Would you like to paste the install log to the web? Kurulum günlüğünü web'e yapıştırmak ister misiniz? 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 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. 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ı. CalamaresWindow %1 Setup Program %1 Kurulum Uygulaması %1 Installer %1 Yükleniyor 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'. Yükleyici '%1' diskinde bölümleme tablosunu güncelleyemedi. CheckerContainer Gathering system information... Sistem bilgileri toplanıyor... ChoicePage Form Biçim Select storage de&vice: Depolama ay&gıtı seç: Current: Geçerli: 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> <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 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ı 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. 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. Config 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. Network Installation. (Disabled: Incorrect configuration) 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ğ 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! 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. ContextualProcessJob Contextual Processes Job Bağlamsal Süreç İşleri CreatePartitionDialog Create a Partition Yeni Bölüm Oluştur Si&ze: Bo&yut: 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ı &Mount Point: &Bağlama Noktası: Flags: Bayraklar: Label for the filesystem FS Label: 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. 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ı. 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) 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ı. CreateUserJob Create user %1 %1 Kullanıcısı oluşturuluyor... Create user <strong>%1</strong>. <strong>%1</strong> kullanıcı oluştur. Preserving home directory Ana dizini koru Creating user %1 %1 kullanıcısı oluşturuluyor Configuring user %1 %1 kullanıcısı yapılandırılıyor Setting file permissions Dosya izinlerini ayarla CreateVolumeGroupDialog Create Volume Group Birim Grubu Oluştur 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ı. 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ı. 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. DeviceInfoWidget 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) 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ı DummyCppJob Dummy C++ Job Dummy C++ Job EditExistingPartitionDialog Edit Existing Partition Mevcut Bölümü Düzenle Content: İçerik: &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: Label for the filesystem FS Label: Mountpoint already in use. Please select another one. Bağlama noktası zaten kullanımda. Lütfen diğerini seçiniz. EncryptWidget Form Biçim En&crypt system Sistemi Şif&rele Passphrase Parola Confirm passphrase Parolayı doğrula Please enter the same passphrase in both boxes. Her iki kutuya da aynı parolayı giriniz. 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> 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. 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. 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>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. FinishedQmlViewStep Finish Kurulum Tamam FinishedViewStep 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. 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. HostInfoJob Collecting information about your machine. Makineniz hakkında bilgi toplama. 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ı. InitcpioJob Creating initramfs with mkinitcpio. Mkinitcpio ile initramfs oluşturuluyor. InitramfsJob Creating initramfs. Initramfs oluşturuluyor. 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> InteractiveTerminalViewStep Script Betik KeyboardQmlViewStep Keyboard Klavye Düzeni KeyboardViewStep Keyboard Klavye Düzeni 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 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. LicenseViewStep License Lisans 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. LocalePage Region: Bölge: Zone: Şehir: &Change... &Değiştir... LocaleQmlViewStep Location Sistem Yereli LocaleTests Quit LocaleViewStep Location Sistem Yereli 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ı. 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 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> 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. 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 too few digits Parola çok az basamak içeriyor The password contains too few uppercase letters Parola çok az 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 too few non-alphanumeric characters Parola çok az sayıda alfasayısal olmayan karakter içeriyor The password is too short Parola çok kısa The password does not contain enough character classes Parola yeterli sayıda karakter sınıfı içermiyor The password contains too many same characters consecutively Parola ardışık olarak aynı sayıda çok karakter 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 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ı tipinde değil Setting is not of integer type Ayar tamsayı tipinde değil Setting %1 is not of string type Ayar %1, dizgi tipi değil Setting is not of string type 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ş 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. PackageChooserViewStep Packages Paketler PackageModel Name İsim Description Açıklama Page_Keyboard Form Form Keyboard Model: Klavye Modeli: Type here to test your keyboard Klavye seçiminizi burada test edebilirsiniz Page_UserSetup Form Form 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 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> 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 PartitionModel Free Space Boş Alan New partition Yeni bölüm Name İsim File System Dosya Sistemi File System Label Mount Point Bağlama Noktası Size Boyut 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. 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. <strong>Erase</strong> disk and install %1. Diski <strong>sil</strong> ve %1 yükle. <strong>Replace</strong> a partition with %1. %1 ile disk bölümünün üzerine <strong>yaz</strong>. <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. %1 başlatmak için bir EFI sistem disk bölümü gereklidir.<br/><br/>Bir EFI sistem disk bölümü yapılandırmak için geri dönün ve <strong>%3</strong> bayrağı etkin ve <strong>%2</strong>bağlama noktası ile bir FAT32 dosya sistemi seçin veya oluşturun.<br/><br/>Bir EFI sistem disk bölümü kurmadan devam edebilirsiniz, ancak sisteminiz başlatılamayabilir. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. %1 başlatmak için bir EFI sistem disk bölümü gereklidir.<br/><br/>Bir disk bölümü bağlama noktası <strong>%2</strong> olarak yapılandırıldı fakat <strong>%3</strong>bayrağı ayarlanmadı.<br/>Bayrağı ayarlamak için, geri dönün ve disk bölümü düzenleyin.<br/><br/>Sen bayrağı ayarlamadan devam edebilirsin fakat işletim sistemi başlatılamayabilir. EFI system partition flag not set EFI sistem bölümü bayrağı ayarlanmadı 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 disk bölümü tablosu tüm sistemler için en iyi seçenektir. Bu yükleyici klasik BIOS sistemler için de böyle bir kurulumu destekler. <br/><br/>Klasik BIOS sistemlerde disk bölümü tablosu GPT tipinde yapılandırmak için (daha önce yapılmadıysa) geri gidin ve disk bölümü tablosu GPT olarak ayarlayın ve ardından <strong>bios_grub</strong> bayrağı ile etiketlenmiş 8 MB biçimlendirilmemiş bir disk bölümü oluşturun.<br/> <br/>GPT disk yapısı ile kurulan klasik BIOS sistemi %1 başlatmak için biçimlendirilmemiş 8 MB bir disk 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. 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 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. PlasmaLnfViewStep Look-and-Feel Look-and-Feel 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ı. ProcessResult There was no output from the command. Komut çıktısı yok. Output: Çıktı: 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ı QObject %1 (%2) %1 (%2) unknown bilinmeyen 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 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ı. 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. 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ı. ResizeVolumeGroupDialog Resize Volume Group Birim Grubunu Yeniden Boyutlandır 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ı. 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 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ı 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ı. 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. 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. 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ü. 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 Uçbirim İşlemleri SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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ış. SummaryViewStep Summary Kurulum Bilgileri 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ı. 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ı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. TrackingPage Form Biçim Placeholder Yer tutucu <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> 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 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 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 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 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, kurulum bittikten sonra birden fazla kullanıcı hesabı oluşturabilirsiniz.</small> UsersQmlViewStep Users Kullanıcı Tercihleri UsersViewStep Users Kullanıcı Tercihleri 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ı: 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 &Known issues &Bilinen hatalar Open release notes website Sürüm Notları web sitesini aç &Release notes &Sürüm notları <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> %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-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 WelcomeViewStep Welcome Hoşgeldiniz 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>%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> 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 Klavye Modeli Layouts Düzenler Keyboard Layout Klavye Düzeni Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Yerleşim ve türevi seçmek için tercih ettiğiniz klavye modeline tıklayın veya algılanan donanıma göre varsayılanı kullanın. Models Modeller Variants Türevler Keyboard Variant Klavye Türevi Test your keyboard Klavyeni test et localeq Change Değiştir notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Bunlar örnek sürüm notlarıdır.</p> 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. 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. 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. 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ğış calamares-3.2.41.1/lang/calamares_uk.ts000066400000000000000000010042111410275732300176130ustar00rootroot00000000000000 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> біля початку таблиці розділів (рекомендовано). Це буде зроблено автоматично, якщо вами не вибрано поділ диска вручну. В останньому випадку вам потрібно встановити завантажувач власноруч. BootLoaderModel Master Boot Record of %1 Головний Завантажувальний Запис (Master Boot Record) %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, щоб дані можна було переглянути у 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 Діагностична інформація 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 модулів. Очікування %n модулів. (%n second(s)) (%n секунда) (%n секунди) (%n секунд(и)) (%n секунд(и)) System-requirements checking is complete. Перевірка системних вимог завершена. Calamares::ViewManager Setup Failed Помилка встановлення Installation Failed Помилка під час встановлення Would you like to paste the install log to the web? Хочете викласти журнал встановлення у мережі? 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. Чи ви насправді бажаєте скасувати процес встановлення? Роботу засобу встановлення буде завершено, і всі зміни буде втрачено. 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. Встановити мітку файлової системи для %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. Використати %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> всі данні, присутні на обраному пристрої зберігання. <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 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 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.<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. Будь ласка, виберіть продукт зі списку. Буде встановлено вибраний продукт. ContextualProcessJob Contextual Processes Job Завдання контекстових процесів CreatePartitionDialog Create a Partition Створити розділ Si&ze: Ро&змір: MiB МіБ Partition &Type: &Тип розділу: &Primary &Основний 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. Точка підключення наразі використовується. Оберіть, будь ласка, іншу. 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». 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 Створення запису користувача %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>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) 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 Редагування розділу Content: Вміст: &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: Мітка ФС: Mountpoint already in use. Please select another one. Точка підключення наразі використовується. Оберіть, будь ласка, іншу. EncryptWidget Form Форма En&crypt system За&шифрувати систему Passphrase Ключова фраза Confirm passphrase Підтвердження ключової фрази Please enter the same passphrase in both boxes. Будь ласка, введіть однакову ключову фразу у обидва текстові вікна. 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> 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>. 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 Завершити 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». 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 &OK 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 Адреса: %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. Не вдалося створити файл ключа 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 Звук та відео 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 У паролі міститься менше за %n літеру нижнього регістру У паролі міститься менше за %n літери нижнього регістру У паролі міститься менше за %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 цифри Цей пароль містить менше ніж %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 Пароль є порожнім PackageChooserPage Form Форма Product Name Назва продукту TextLabel Текстова мітка Long Product Description Довгий опис продукту Package Selection Вибір пакетів Please pick a product from the list. The selected product will be installed. Будь ласка, виберіть продукт зі списку. Буде встановлено вибраний продукт. 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: &Пристрій зберігання: &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 Розділи 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). Встановити %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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Щоб запустити %1, потрібен системний розділ EFI.<br/><br/>Щоб налаштувати системний розділ EFI, поверніться і виберіть або створіть файлову систему FAT32 з увімкненим параметром <strong>%3</strong> та точкою монтування <strong>%2</strong>.<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Для запуску %1 потрібен системний розділ EFI.<br/><br/>Розділ налаштовано з точкою підключення <strong>%2</strong>, але опція <strong>%3</strong> не встановлено.<br/>Щоб встановити опцію, поверніться та відредагуйте розділ.<br/><br/>Ви можете продовжити не налаштовуючи цю опцію, але ваша система може не запускатись. EFI system partition flag not set Опцію системного розділу 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. 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 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. Аварійне завершення виконання команди <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: Системний розділ 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>%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». 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> Цей комп'ютер не задовольняє мінімальні вимоги для налаштовування %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 Поділ на розділи 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. Встановити прапорці для розділу у %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>. 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. 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. 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 Завдання для процесів командної оболонки SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 з %L2 SummaryPage 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. Це огляд того, що трапиться коли ви почнете процедуру встановлення. SummaryViewStep Summary Огляд 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. Якщо позначити цей пункт, програма регулярно надсилатиме дані щодо встановленої вами системи користувача, обладнання, програм та користування системою до %1. TrackingViewStep Feedback Відгуки 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: Кількість логічних томів: 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/>© 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 Вітаємо WelcomeViewStep Welcome Вітаємо 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/> © 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. 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> 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 Модель клавіатури Layouts Розкладки Keyboard Layout Розкладка клавіатури Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Клацніть на пункті бажаної для вас моделі клавіатури, щоб вибрати розкладку і варіант, або скористайтеся типовою, визначеною на основі виявленого обладнання Models Моделі Variants Варіанти Keyboard Variant Варіант клавіатури Test your keyboard Перевірте вашу клавіатуру localeq Change Змінити notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>Це приклад нотаток щодо випуску.</p> 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 Підтримати фінансово calamares-3.2.41.1/lang/calamares_ur.ts000066400000000000000000005604461410275732300176420ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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> ٪ 1 Calamares کے انسٹالر میں خوش آمدید <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. WelcomeQmlViewStep Welcome خوش آمدید WelcomeViewStep Welcome خوش آمدید 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> 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 کی بورڈ کے نمونے Layouts لے آؤٹ Keyboard Layout کی بورڈ لے آؤٹ Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models نمونے Variants متغیرات Keyboard Variant Test your keyboard اپنے کی بورڈ کی جانچ کریں localeq Change تبدیلی notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 عطیہ calamares-3.2.41.1/lang/calamares_uz.ts000066400000000000000000005567121410275732300176530ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_vi.ts000066400000000000000000007075561410275732300176370ustar00rootroot00000000000000 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> 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. Reloads the stylesheet from the branding directory. Uploads the session log to the configured pastebin. Send Session Log Reload Stylesheet Tải lại bảng định kiểu Displays the tree of widget names in the log (for stylesheet debugging). 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 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? 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 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. Cannot get list of temporary mounts. Không thể lấy danh sách 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. 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: &Primary &Sơ cấp 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. 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ó Content: Nội dung: &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: 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. EncryptWidget Form Biểu mẫu En&crypt system &Mã hóa hệ thống 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. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. Cài đặt %1 <strong> cùng với </strong> hệ điều hành khác. <strong>Erase</strong> disk and install %1. <strong> Xóa </strong> đĩa và cài đặt %1. <strong>Replace</strong> a partition with %1. <strong>thay thế</strong> một phân vùng với %1. <strong>Manual</strong> partitioning. Phân vùng <strong> thủ công </strong>. Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Cài đặt %1 <strong> cùng với </strong> hệ điều hành khác trên đĩa <strong>%2</strong> (%3). <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong> Xóa </strong> đĩa <strong>%2 </strong> (%3) và cài đặt %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong> Thay thế </strong> phân vùng trên đĩa <strong>%2 </strong> (%3) bằng %1. <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). Phân vùng <strong> thủ công </strong> trên đĩa <strong>%1 </strong> (%2). Disk <strong>%1</strong> (%2) Đĩa <strong>%1</strong> (%2) 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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. Cần có phân vùng hệ thống EFI để khởi động %1. <br/> <br/> Để định cấu hình phân vùng hệ thống EFI, hãy quay lại và chọn hoặc tạo hệ thống tệp FAT32 với cờ <strong> %3 </strong> được bật và gắn kết point <strong> %2 </strong>. <br/> <br/> Bạn có thể tiếp tục mà không cần thiết lập phân vùng hệ thống EFI nhưng hệ thống của bạn có thể không khởi động được. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. Một phân vùng hệ thống EFI là cần thiết để bắt đầu %1. <br/> <br/> Một phân vùng đã được định cấu hình với điểm gắn kết <strong> %2 </strong> nhưng cờ <strong> %3 </strong> của nó không được đặt . <br/> Để đặt cờ, hãy quay lại và chỉnh sửa phân vùng. <br/> <br/> Bạn có thể tiếp tục mà không cần đặt cờ nhưng hệ thống của bạn có thể không khởi động được. EFI system partition flag not set Cờ phân vùng hệ thống EFI chưa được đặt 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>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. Bảng phân vùng GPT là lựa chọn tốt nhất cho tất cả các hệ thống. Trình cài đặt này cũng hỗ trợ thiết lập như vậy cho các hệ thống BIOS. <br/> <br/> Để định cấu hình bảng phân vùng GPT trên BIOS, (nếu chưa thực hiện xong) hãy quay lại và đặt bảng phân vùng thành GPT, tiếp theo tạo 8 MB phân vùng chưa định dạng với cờ <strong> bios_grub </strong> được bật. <br/> <br/> Cần có phân vùng 8 MB chưa được định dạng để khởi động %1 trên hệ thống BIOS có GPT. 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 ResultsListWidget 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 đáp ứng các yêu cầu tối thiểu để thiết lập %1. <br/> Không thể tiếp tục thiết lập. <a href="#details"> Chi tiết ... </a> 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 đáp ứng các yêu cầu tối thiểu để cài đặt %1. <br/> Không thể tiếp tục cài đặt. <a href="#details"> Chi tiết ... </a> 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 đáp ứng một số yêu cầu được khuyến nghị để thiết lập %1. <br/> Quá trình thiết lập có thể tiếp tục nhưng một số tính năng có thể bị tắt. 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 đáp ứng một số yêu cầu được khuyến nghị để cài đặt %1. <br/> Quá trình cài đặt có thể tiếp tục, nhưng một số tính năng có thể bị tắt. 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 một số câu hỏi và thiết lập %2 trên máy tính của bạn. 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 SummaryPage 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. SummaryViewStep Summary Tổng quan 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 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 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> 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 Keyboard Model Mẫu bàn phím Layouts Bố cục Keyboard Layout Bố cục bàn phím Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Nhấp vào kiểu bàn phím ưa thích của bạn để chọn bố cục và biến thể hoặc sử dụng kiểu mặc định dựa trên phần cứng được phát hiện. Models Mẫu Variants Các biến thể Keyboard Variant Các biến thể bàn phím Test your keyboard Thử bàn phím 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> 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ộ calamares-3.2.41.1/lang/calamares_zh.ts000066400000000000000000005567121410275732300176360ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_zh_CN.ts000066400000000000000000006556201410275732300202140ustar00rootroot00000000000000 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>(推荐)中。这个步骤是自动的,除非您选择手动分区——此时您必须自行配置。 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. 从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. 用于 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 错误。 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. 已经完成系统需求检查。 Calamares::ViewManager Setup Failed 安装失败 Installation Failed 安装失败 Would you like to paste the install log to the web? 需要将安装日志粘贴到网页吗? 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. 确定要取消当前的安装吗? 安装程序将退出,所有修改都会丢失。 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. 在%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... 正在收集系统信息 ... ChoicePage Form 表单 Select storage de&vice: 选择存储器(&V): 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 的 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>目前选定的存储器上所有的数据。 <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 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. 该命令在主机环境中运行,且需要知道根路径,但没有定义root挂载点。 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/%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 %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. 请在列表中选一个产品。被选中的产品将会被安装。 ContextualProcessJob Contextual Processes Job 后台任务 CreatePartitionDialog Create a Partition 创建分区 Si&ze: 大小(&Z): MiB MiB Partition &Type: 分区类型(&T): &Primary 主分区(&P) 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. 挂载点已被占用。请选择另一个。 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. 在 %4 (%3) 上创建新的 %2MiB 分区,文件系统为 %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>%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”创建分区失败。 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). 在 <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>. 创建用户 <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> <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) 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 编辑已有分区 Content: 内容: &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: 标记: Label for the filesystem 此文件系统的卷标名 FS Label: 文件系统卷标 Mountpoint already in use. Please select another one. 挂载点已被占用。请选择另一个。 EncryptWidget Form 表单 En&crypt system 加密系统 Passphrase 密码 Confirm passphrase 确认密码 Please enter the same passphrase in both boxes. 请在两个输入框中输入同样的密码。 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. 设置%3 分区的挂载点 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. <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。 FinishedQmlViewStep Finish 结束 FinishedViewStep 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 失败。 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. 屏幕不能完整显示安装器。 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 未安装 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 取消(&C) &OK &确定 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 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... 更改 (&C) ... LocaleQmlViewStep Location 位置 LocaleTests Quit 退出 LocaleViewStep Location 位置 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密钥文件。 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 备注 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> 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 密码包含的小写字母少于 %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 个 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 密码是空 PackageChooserPage Form 表单 Product Name 产品名称 TextLabel 文本标签 Long Product Description 长产品描述 Package Selection 软件包选择 Please pick a product from the list. The selected product will be installed. 请在列表中选一个产品。被选中的产品将会被安装。 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>输入相同密码两次,以检查输入错误。好的密码包含字母,数字,标点的组合,应当至少为 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 根目录 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 创建 &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个主分区,并且不能再添加。请删除一个主分区并添加扩展分区。 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. 以 %1 <strong>替代</strong>一个分区。 <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 必须有 EFI 系统分区才能启动 %1 。<br/><br/>要配置 EFI 系统分区,后退一步,然后创建或选中一个 FAT32 分区并为之设置 <strong>%3</strong> 标记及挂载点 <strong>%2</strong>。<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 必须有 EFI 系统分区才能启动 %1 。<br/><br/>已有挂载点为 <strong>%2</strong> 的分区,但是未设置 <strong>%3</strong> 标记。<br/>要设置此标记,后退并编辑分区。<br/><br/>你可以不创建 EFI 系统分区并继续安装,但是你的系统可能无法启动。 EFI system partition flag not set 未设置 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 来说是非常有必要的。 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 外观主题任务 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 从目标系统删除 live 用户 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. <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 必须调整大小,但无法做到。 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 大小失败。 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> 此计算机不满足安装 %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 正在分区 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. 设置 %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> 分区的标记. 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 的标记. 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 中止。 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 进程任务 SlideCounter %L1 / %L2 slide counter, %1 of %2 (numeric) %L1 / %L2 SummaryPage 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. 这是您开始安装后所会发生的事情的概览。 SummaryViewStep Summary 摘要 TrackingInstallJob Installation feedback 安装反馈 Sending installation feedback. 发送安装反馈。 Internal error in install-tracking. 在 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 反馈 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 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: 逻辑分卷数量: 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>欢迎使用 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-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 欢迎 WelcomeViewStep Welcome 欢迎 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/> 您现在可以重新启动到新系统,或是继续使用 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 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 键盘型号 Layouts 布局 Keyboard Layout 键盘布局 Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. 单击您的首选键盘型号以选择布局和变体,或根据检测到的硬件使用默认键盘。 Models 型号 Variants 变体 Keyboard Variant 键盘变体 Test your keyboard 测试您的键盘 localeq Change 更改 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>这些是发布日志样例</p> 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 捐赠 calamares-3.2.41.1/lang/calamares_zh_HK.ts000066400000000000000000005567151410275732300202230ustar00rootroot00000000000000 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 Would you like to paste the install log to the web? 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 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. 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 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. ContextualProcessJob Contextual Processes Job CreatePartitionDialog Create a Partition Si&ze: MiB Partition &Type: &Primary 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. 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 Content: &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: Mountpoint already in use. Please select another one. EncryptWidget Form En&crypt system Passphrase Confirm passphrase Please enter the same passphrase in both boxes. 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 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. 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 Install %1 <strong>alongside</strong> another operating system. <strong>Erase</strong> disk and install %1. <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 An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. EFI system partition flag not set 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. 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 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 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) SummaryPage 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. SummaryViewStep Summary 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 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 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> 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 Layouts Keyboard Layout Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. Models Variants Keyboard Variant Test your keyboard localeq Change notesqml <h3>%1</h3> <p>These are example release notes.</p> 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 calamares-3.2.41.1/lang/calamares_zh_TW.ts000066400000000000000000006630241410275732300202430ustar00rootroot00000000000000 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>。這是自動的,除非選擇手動分割;在這種情況,您必須自行設定它。 BootLoaderModel Master Boot Record of %1 %1 的主要開機紀錄 (MBR) 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 當機,這樣 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 除錯資訊 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. 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 錯誤。 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. 系統需求檢查完成。 Calamares::ViewManager Setup Failed 設定失敗 Installation Failed 安裝失敗 Would you like to paste the install log to the web? 想要將安裝紀錄檔貼到網路上嗎? 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. 您真的想要取消目前的安裝程序嗎? 安裝程式將會退出且所有變動將會遺失。 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. 在 %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: 選取儲存裝置(&V): 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,並且會為 %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>目前選取的儲存裝置所有的資料。 <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 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 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 的最低配備。<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. 請從清單中挑選產品。將會安裝選定的產品。 ContextualProcessJob Contextual Processes Job 情境處理程序工作 CreatePartitionDialog Create a Partition 建立一個分割區 Si&ze: 容量大小 (&z) : MiB MiB Partition &Type: 分割區與類型 (&T): &Primary 主要分割區 (&P) 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. 掛載點使用中。請選擇其他的。 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' 上建立分割區失敗。 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). 在 <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>. 建立使用者 <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><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) 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 編輯已經存在的分割區 Content: 內容: &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: 旗標: Label for the filesystem 檔案系統標籤 FS Label: 檔案系統標籤: Mountpoint already in use. Please select another one. 掛載點使用中。請選擇其他的。 EncryptWidget Form 形式 En&crypt system 加密系統(&C) Passphrase 通關密語 Confirm passphrase 確認通關密語 Please enter the same passphrase in both boxes. 請在兩個框框中輸入相同的通關密語。 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> 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。 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. <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。 FinishedQmlViewStep Finish 完成 FinishedViewStep 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 失敗。 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 未安裝 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 取消(&C) &OK 確定(&O) 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 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... 變更...(&C) 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. 生成 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 記事 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> 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 密碼中僅有少於 %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 位數字 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 密碼為空 PackageChooserPage Form 形式 Product Name 產品名稱 TextLabel 文字標籤 Long Product Description 較長的產品描述 Package Selection 軟體包選擇 Please pick a product from the list. The selected product will be installed. 請從清單中挑選產品。將會安裝選定的產品。 PackageChooserViewStep Packages 軟體包 PackageModel Name 名稱 Description 描述 Page_Keyboard Form Form Keyboard Model: 鍵盤型號: Type here to test your keyboard 在此輸入以測試您的鍵盤 Page_UserSetup Form 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 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 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 個主要分割區,無法再新增。請移除一個主要分割區並新增一個延伸分割區。 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. 以 %1 <strong>取代</strong>一個分割區。 <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>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. 需要 EFI 系統分割區以啟動 %1。<br/><br/>要設定 EFI 系統分割區,回到上一步並選取或建立一個包含啟用 <strong>%3</strong> 旗標以及掛載點位於 <strong>%2</strong> 的 FAT32 檔案系統。<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>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. 需要 EFI 系統分割區以啟動 %1。<br/><br/>有一個分割區的掛載點設定為 <strong>%2</strong>,但未設定 <strong>%3</strong> 旗標。<br/>要設定此旗標,回到上一步並編輯分割區。<br/><br/>您也可以不設定旗標並繼續,但您的系統可能會無法啟動。 EFI system partition flag not set 未設定 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 分割區。 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 外觀與感覺工作 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 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 的卷冊群組。 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. 在 %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 必須調整大小,但是無法調整。 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. 調整名為 %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> 此電腦未滿足安裝 %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 分割 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. 清除 %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>%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. 無法停用 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 這些群組在目標系統中不存在:%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 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. 這是您開始安裝後所會發生的事的概覽。 SummaryViewStep Summary 總覽 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 回饋 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: 邏輯卷冊數量: 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/>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 歡迎 WelcomeViewStep Welcome 歡迎 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/> 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> <p>完整安裝紀錄檔可在 Live 使用者的家目錄中以 installation.log 的名稱取得。<br/> 此紀錄檔已複製到目標系統的 /var/log/installation.log。</p> 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 鍵盤型號 Layouts 佈局 Keyboard Layout 鍵盤佈局 Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. 點擊您偏好的鍵盤型號來選擇佈局與變體,或是使用以偵測到的硬體為基礎的預設值。 Models 型號 Variants 變種 Keyboard Variant 鍵盤變體 Test your keyboard 測試您的鍵盤 localeq Change 變更 notesqml <h3>%1</h3> <p>These are example release notes.</p> <h3>%1</h3> <p>此為發行記事範本。</p> 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 捐助 calamares-3.2.41.1/lang/kb_en.ts000066400000000000000000005776741410275732300162750ustar00rootroot00000000000000 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 calamares-3.2.41.1/lang/kb_tg.ts000066400000000000000000006104701410275732300162630ustar00rootroot00000000000000 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 Йоруба calamares-3.2.41.1/lang/python.pot000066400000000000000000000326471410275732300166760ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\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-Transfer-Encoding: 8bit\n" "Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configure GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Mounting partitions." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Configuration Error" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "No partitions are defined for
{!s}
to use." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configure systemd services" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Cannot enable systemd service {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Cannot disable systemd target {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Cannot mask systemd unit {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Unmount file systems." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Filling up filesystems." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync failed with error code {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Unpacking image {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Starting to unpack {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Failed to unpack image \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "No mount point for root partition" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Bad mount point for root partition" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Bad unsquash configuration" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "The source filesystem \"{}\" does not exist" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Cannot write KDM configuration file" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Cannot write LXDM configuration file" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Cannot write LightDM configuration file" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM config file {!s} does not exist" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Cannot configure LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "No LightDM greeter installed." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Cannot write SLIM configuration file" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM config file {!s} does not exist" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "No display managers selected for the displaymanager module." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Display manager configuration was incomplete" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configuring mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Configuring encrypted swap." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installing data." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configure OpenRC services" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Unknown service-action {arg!s} for service {name!s} in 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} call in chroot returned error code {num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." #: 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:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "The path for service {name!s} is {path!s}, which does not " "exist." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configure Plymouth theme" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Package Manager error" #: src/modules/packages/main.py:589 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:601 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:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Bootloader installation error" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Creating initramfs with mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Failed to run mkinitfs on the target" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "The exit code was {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuring OpenRC dmcrypt service." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Writing fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Configuring locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Saving network configuration." calamares-3.2.41.1/lang/python/000077500000000000000000000000001410275732300161365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ar/000077500000000000000000000000001410275732300165405ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ar/LC_MESSAGES/000077500000000000000000000000001410275732300203255ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ar/LC_MESSAGES/python.po000066400000000000000000000265211410275732300222140ustar00rootroot00000000000000# 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: # Abubakaragoub Y , 2018 # aboodilankaboot, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "جاري تركيب الأقسام" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "خطأ في الضبط" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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 "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "الغاء تحميل ملف النظام" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "جاري ملئ أنظمة الملفات" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "فشل rsync مع رمز الخطأ {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "فشلت كتابة ملف ضبط KDM." #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "ملف ضبط KDM {!s} غير موجود" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "فشلت كتابة ملف ضبط LXDM." #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "ملف ضبط LXDM {!s} غير موجود" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "فشلت كتابة ملف ضبط LightDM." #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "ملف ضبط LightDM {!s} غير موجود" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "فشل ضبط LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "لم يتم تصيب LightDM" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "فشلت كتابة ملف ضبط SLIM." #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "ملف ضبط SLIM {!s} غير موجود" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "إعداد مدير العرض لم يكتمل" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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 "الـ runlevel الهدف غير موجود" #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "تثبيت الحزم" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "جاري تحميل الحزم (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "جاري حفظ الإعدادات" calamares-3.2.41.1/lang/python/as/000077500000000000000000000000001410275732300165415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/as/LC_MESSAGES/000077500000000000000000000000001410275732300203265ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/as/LC_MESSAGES/python.po000066400000000000000000000373311410275732300222160ustar00rootroot00000000000000# 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: # Deep Jyoti Choudhury , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: as\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:30 msgid "Mounting partitions." msgstr "বিভাজন মাউন্ট্ কৰা।" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "কনফিগাৰেচন ত্ৰুটি" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
ৰ ব্যৱহাৰৰ বাবে কোনো বিভাজনৰ বৰ্ণনা দিয়া হোৱা নাই।" #: 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 "chrootত systemctl {arg!s}ৰ call ক্ৰুটি কোড {num!s}।" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "systemd গন্তব্য স্থান {name!s} নিষ্ক্ৰিয় কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd একক {name!s} মাস্ক্ কৰিব নোৱাৰি।" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "একক {name!s}ৰ বাবে {command!s} আৰু {suffix!s} " "অজ্ঞাত systemd কমাণ্ড্।" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "ফাইল চিছটেম​বোৰ মাউণ্টৰ পৰা আতৰাওক।" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "ফাইল চিছটেম​বোৰ পূৰণ কৰা হৈ আছে।" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync ক্ৰুটি কোড {}ৰ সৈতে বিফল হ'ল।" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "ইমেজ \"{}\" খোলাত ব্যৰ্থ হ'ল" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "ৰুট বিভাজনত কোনো মাউণ্ট পইণ্ট্ নাই" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage ত rootMountPoint key নাই, একো কৰিব পৰা নাযায়" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "মুল বিভাজনৰ বাবে বেয়া মাউন্ট্ পইন্ট্" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint হ'ল \"{}\", যিটো উপস্থিত নাই, একো কৰিব পৰা নাযায়" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "বেয়া unsquash কনফিগাৰেচন" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" ফাইল চিছটেম উপস্থিত নাই" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs বিচৰাত ব্যৰ্থ হ'ল, নিশ্চিত কৰক যে আপুনি squashfs-tools ইন্স্তল " "কৰিছে" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "লক্ষ্যৰ চিছটেম গন্তব্য স্থান \"{}\" এটা ডিৰেক্টৰী নহয়" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM কনফিগ্ ফাইল {!s} উপস্থিত নাই" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM কনফিগাৰ কৰিব নোৱাৰি" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "কোনো LightDM স্ৱাগতকৰ্তা ইন্স্তল নাই।" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM কনফিগাৰেচন ফাইলত লিখিব নোৱাৰি" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM কনফিগ্ ফাইল {!s} উপস্থিত নাই" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager মডিউলৰ বাবে কোনো ডিস্প্লে প্ৰবন্ধক নাই।" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "ডিস্প্লে প্ৰবন্ধক কন্ফিগাৰেচন অসমাপ্ত" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio কনফিগাৰ কৰি আছে।" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "ব্যৱহাৰৰ বাবে
{!s}
ৰ কোনো মাউন্ট্ পাইন্ট্ দিয়া হোৱা নাই।" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "এন্ক্ৰিপ্টেড স্ৱেপ কন্ফিগাৰ কৰি আছে।" #: 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 "" "ৰান-লেভেল {level!s}ত সেৱা {name!s}ৰ বাবে অজ্ঞাত সেৱা কাৰ্য্য " "{arg!s} ।" #: 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: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 theme কন্ফিগাৰ কৰি আছে।​" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "পেকেজ ইন্স্তল কৰক।" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) পেকেজবোৰ সংশোধন কৰি আছে" #: src/modules/packages/main.py:62 #, 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "%(num)d পেকেজবোৰ আতৰোৱা হৈ আছে।" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "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: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:389 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:30 msgid "Configuring locales." msgstr "স্থানীয়বোৰ কন্ফিগাৰ কৰি আছে।" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "নেটৱৰ্ক কন্ফিগাৰ জমা কৰি আছে।" calamares-3.2.41.1/lang/python/ast/000077500000000000000000000000001410275732300167255ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ast/LC_MESSAGES/000077500000000000000000000000001410275732300205125ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ast/LC_MESSAGES/python.po000066400000000000000000000301071410275732300223740ustar00rootroot00000000000000# 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: # enolp , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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 "Nun pue modificase'l serviciu" #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmontaxe de sistemes de ficheros." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Rellenando los sistemes de ficheros." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync falló col códigu de fallu {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Fallu al desempaquetar la imaxe «{}»" #: src/modules/unpackfs/main.py:431 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:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nun contién una clave «rootMountPoint». Nun va facese nada" #: src/modules/unpackfs/main.py:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint ye «{}» que nun esiste. Nun va facese nada" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "La configuración d'espardimientu ye incorreuta" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de ficheros d'orixe «{}» nun esiste" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Fallu al alcontrar unsquashfs, asegúrate que tienes instaláu'l paquete " "squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de KDM {!s}" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LXDM {!s}" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de LightDM {!s}" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Nun pue configurase LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nun s'instaló nengún saludador de LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Nun pue escribise'l ficheru de configuración de SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Nun esiste'l ficheru de configuración de SLIM {!s}" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "La configuración del xestor de pantalles nun se completó" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Configurando l'intercambéu cifráu." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando datos." #: 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 "Nun pue amestase'l serviciu {name!s} al nivel d'execución {level!s}." #: 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: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 "El nivel d'execución de destín nun esiste" #: 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 "El serviciu de destín nun esiste" #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalación de paquetes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/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 "El códigu de salida foi {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando'l serviciu dmcrypt d'OpenRC." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "" #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Configurando locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/az/000077500000000000000000000000001410275732300165505ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/az/LC_MESSAGES/000077500000000000000000000000001410275732300203355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/az/LC_MESSAGES/python.po000066400000000000000000000342761410275732300222320ustar00rootroot00000000000000# 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 , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2021\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:30 msgid "Mounting partitions." msgstr "Disk bölmələri qoşulur." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Tənzimləmə xətası" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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/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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "{name!s} systemd hədfi sönsürülmədi." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "{name!s} systemd vahidi maskalanmır." #: src/modules/services-systemd/main.py:73 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/umount/main.py:31 msgid "Unmount file systems." msgstr "Fayl sistemini ayırmaq." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Fayl sistemlərini doldurmaq." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync uğursuz oldu, xəta kodu: {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" "Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " "{}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Tərkiblərini açmağa başladılır {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" #: src/modules/unpackfs/main.py:431 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:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur, heç bir " "əməliyyat getmir" #: src/modules/unpackfs/main.py:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\" mövcud deyil, heç bir əməliyyat getmir" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Unsquash xətalı tənzimlənməsi" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" #: src/modules/unpackfs/main.py:465 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:479 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:526 msgid "Cannot write KDM configuration file" msgstr "KDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM tənzimlənə bilmir" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM qarşılama quraşdırılmayıb." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLİM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." #: src/modules/displaymanager/main.py:907 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:989 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:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Çifrələnmiş mübadilə sahəsi - swap tənzimlənir." #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Paketləri quraşdırmaq." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) paketləri işlənir" #: src/modules/packages/main.py:62 #, 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:65 #, 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:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Paket meneceri xətası" #: src/modules/packages/main.py:589 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:601 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:629 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:502 msgid "Bootloader installation error" msgstr "Önyükləyicinin quraşdırılmasında xəta" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "Lokallaşma tənzimlənir." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Şəbəkə ayarları saxlanılır." calamares-3.2.41.1/lang/python/az_AZ/000077500000000000000000000000001410275732300171425ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/az_AZ/LC_MESSAGES/000077500000000000000000000000001410275732300207275ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/az_AZ/LC_MESSAGES/python.po000066400000000000000000000343211410275732300226130ustar00rootroot00000000000000# 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 , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Xəyyam Qocayev , 2021\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:30 msgid "Mounting partitions." msgstr "Disk bölmələri qoşulur." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Tənzimləmə xətası" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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/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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "{name!s} systemd hədfi sönsürülmədi." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "{name!s} systemd vahidi maskalanmır." #: src/modules/services-systemd/main.py:73 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/umount/main.py:31 msgid "Unmount file systems." msgstr "Fayl sistemini ayırmaq." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Fayl sistemlərini doldurmaq." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync uğursuz oldu, xəta kodu: {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" "Tərkibi çıxarılan quraşdırma faylı - image {}/{}, çıxarılan faylların sayı " "{}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Tərkiblərini açmağa başladılır {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" quraşdırma faylının tərkibini çıxarmaq alınmadı" #: src/modules/unpackfs/main.py:431 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:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage tərkibində bir \"rootMountPoint\" açarı yoxdur, heç bir " "əməliyyat getmir" #: src/modules/unpackfs/main.py:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\" mövcud deyil, heç bir əməliyyat getmir" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Unsquash xətalı tənzimlənməsi" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" mənbə fayl sistemi mövcud deyil" #: src/modules/unpackfs/main.py:465 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:479 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:526 msgid "Cannot write KDM configuration file" msgstr "KDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM tənzimlənə bilmir" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM qarşılama quraşdırılmayıb." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLİM tənzimləmə faylı yazıla bilmir" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLİM tənzimləmə faylı {!s} mövcud deyil" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager modulu üçün ekran menecerləri seçilməyib." #: src/modules/displaymanager/main.py:907 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:989 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:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Çifrələnmiş mübadilə sahəsi - swap tənzimlənir." #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Paketləri quraşdırmaq." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "(%(count)d / %(total)d) paketləri işlənir" #: src/modules/packages/main.py:62 #, 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:65 #, 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:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Paket meneceri xətası" #: src/modules/packages/main.py:589 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:601 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:629 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:502 msgid "Bootloader installation error" msgstr "Önyükləyicinin quraşdırılmasında xəta" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "Lokallaşma tənzimlənir." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Şəbəkə ayarları saxlanılır." calamares-3.2.41.1/lang/python/be/000077500000000000000000000000001410275732300165245ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/be/LC_MESSAGES/000077500000000000000000000000001410275732300203115ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/be/LC_MESSAGES/python.po000066400000000000000000000362261410275732300222030ustar00rootroot00000000000000# 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: # Źmicier Turok , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Наладзіць GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Мантаванне раздзелаў." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Памылка канфігурацыі" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Раздзелы для
{!s}
не вызначаныя." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Немагчыма выключыць мэту systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Немагчыма замаскаваць адзінку systemd {name!s}. " #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Невядомыя systemd загады {command!s} і {suffix!s} " "для адзінкі {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Адмантаваць файлавыя сістэмы." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Запаўненне файлавых сістэм." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "памылка rsync з кодам {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Распакоўванне вобраза {}/{}, файл {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Запуск распакоўвання {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Не атрымалася распакаваць вобраз \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Для каранёвага раздзела няма пункта мантавання" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage не змяшчае ключа \"rootMountPoint\", нічога не выконваецца" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Хібны пункт мантавання для каранёвага раздзела" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\" не існуе, нічога не выконваецца" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Хібная канфігурацыя unsquash" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Файлавая сістэма для \"{}\" ({}) не падтрымліваецца вашым бягучым ядром" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Зыходная файлавая сістэма \"{}\" не існуе" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Не атрымалася знайсці unsquashfs, праверце ці ўсталяваны ў вас пакунак " "squashfs-tools" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Пункт прызначэння \"{}\" у мэтавай сістэме не з’яўляецца каталогам" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Файл канфігурацыі KDM {!s} не існуе" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Файл канфігурацыі LXDM {!s} не існуе" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Файл канфігурацыі LightDM {!s} не існуе" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Немагчыма наладзіць LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM greeter не ўсталяваны." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Немагчыма запісаць файл канфігурацыі SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Файл канфігурацыі SLIM {!s} не існуе" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "У модулі дысплейных кіраўнікоў нічога не абрана." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Спіс дысплейных кіраўнікоў пусты альбо не вызначаны ў both globalstorage і " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Наладка дысплейнага кіраўніка не завершаная." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Наладка mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "Каранёвы пункт мантавання для
{!s}
не пададзены." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Наладка зашыфраванага swap." #: 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} на ўзровень запуску {level!s}." #: 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: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: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 "Шлях {path!s} да ўзроўня запуску {level!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 "Шлях {path!s} да службы {level!s} не існуе." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Наладзіць тэму Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Усталяваць пакункі." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Апрацоўка пакункаў (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Усталёўка аднаго пакунка." msgstr[1] "Усталёўка %(num)d пакункаў." msgstr[2] "Усталёўка %(num)d пакункаў." msgstr[3] "Усталёўка%(num)d пакункаў." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Выдаленне аднаго пакунка." msgstr[1] "Выдаленне %(num)d пакункаў." msgstr[2] "Выдаленне %(num)d пакункаў." msgstr[3] "Выдаленне %(num)d пакункаў." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "Наладка лакаляў." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Захаванне сеткавай канфігурацыі." calamares-3.2.41.1/lang/python/bg/000077500000000000000000000000001410275732300165265ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/bg/LC_MESSAGES/000077500000000000000000000000001410275732300203135ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/bg/LC_MESSAGES/python.po000066400000000000000000000251331410275732300222000ustar00rootroot00000000000000# 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: # Georgi Georgiev (Жоро) , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Georgi Georgiev (Жоро) , 2020\n" "Language-Team: Bulgarian (https://www.transifex.com/calamares/teams/20061/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Демонтирай файловите системи." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Инсталирай пакетите." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработване на пакетите (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Инсталиране на един пакет." msgstr[1] "Инсталиране на %(num)d пакети." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Премахване на един пакет." msgstr[1] "Премахване на %(num)d пакети." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/bn/000077500000000000000000000000001410275732300165355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/bn/LC_MESSAGES/000077500000000000000000000000001410275732300203225ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/bn/LC_MESSAGES/python.po000066400000000000000000000265511410275732300222140ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "মাউন্ট করছে পার্টিশনগুলো।" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "কনফিগারেশন ত্রুটি" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "আনমাউন্ট ফাইল সিস্টেমগুলি করুন।" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "ফাইলসিস্টেমগুলিপূরণ করছে।" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "ত্রুটি কোড সহ আরসিঙ্ক ব্যর্থ হয়েছে {}।" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "চিত্র আনপ্যাক করছে {} / {}, ফাইল {} / {}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "আনপ্যাক করা শুরু করছে {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "চিত্র আনপ্যাক করতে ব্যর্থ হয়েছে \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ca/000077500000000000000000000000001410275732300165215ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ca/LC_MESSAGES/000077500000000000000000000000001410275732300203065ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ca/LC_MESSAGES/python.po000066400000000000000000000345011410275732300221720ustar00rootroot00000000000000# 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: # Davidmp , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Davidmp , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura el GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Es munten les particions." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Error de configuració" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Configura els serveis de systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ordres desconegudes de systemd: {command!s} i " "{suffix!s}, per a la unitat {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmunta els sistemes de fitxers." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "S'omplen els sistemes de fitxers." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Es desempaqueta la imatge {}/{}, fitxer {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Es comença a desempaquetar {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Ha fallat desempaquetar la imatge \"{}\"." #: src/modules/unpackfs/main.py:431 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:432 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:437 msgid "Bad mount point for root partition" msgstr "Punt de muntatge incorrecte per a la partició d'arrel" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Configuració incorrecta d'unsquash." #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ha fallat trobar unsquashfs, assegureu-vos que tingueu el paquet squashfs-" "tools instal·lat." #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "La llista de gestors de pantalla és buida o no definida ni a globalstorage " "ni a displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "La configuració del gestor de pantalla no era completa." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Es configura mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Es configura l'intercanvi encriptat." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "S'instal·len dades." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura els serveis d'OpenRC" #: 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: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: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: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:101 msgid "Target runlevel does not exist" msgstr "El nivell d'execució de destinació no existeix." #: 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:110 msgid "Target service does not exist" msgstr "El servei de destinació no existeix." #: 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:27 msgid "Configure Plymouth theme" msgstr "Configura el tema del Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instal·la els paquets." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Es processen paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Error del gestor de paquets" #: src/modules/packages/main.py:589 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:601 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:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Error d'instal·lació del carregador d'arrencada" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Es creen initramfs amb mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Ha fallat executar mkinitfs a la destinació." #: 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/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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Es configura el sevei OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "S'escriu fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Es configuren les llengües." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Es desa la configuració de la xarxa." calamares-3.2.41.1/lang/python/ca@valencia/000077500000000000000000000000001410275732300203245ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ca@valencia/LC_MESSAGES/000077500000000000000000000000001410275732300221115ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ca@valencia/LC_MESSAGES/python.po000066400000000000000000000336411410275732300240010ustar00rootroot00000000000000# 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: # Raul , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "Content-Transfer-Encoding: 8bit\n" "Language: ca@valencia\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura el GRUB" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "S'estan muntant les particions." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "S'ha produït un error en la configuració." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "No s'han definit particions perquè les use
{!s}
." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura els serveis de systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "No es pot habilitar el servei de systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "No es pot inhabilitar la destinació de systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "No es pot emmascarar la unitat de systemd {name!s}." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Desmunta els sistemes de fitxers." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "S'estan emplenant els sistemes de fitxers." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Ha fallat rsync amb el codi d'error {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "S’està desempaquetant la imatge {}/{}, fitxer {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "S’està començant a desempaquetar {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "No s’ha pogut desempaquetar la imatge \"{}\"." #: src/modules/unpackfs/main.py:431 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:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage no conté cap clau de \"rootMountPoint\". No s'està fent res." #: src/modules/unpackfs/main.py:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "El punt de muntatge d'arrel és \"{}\", que no existeix. No s’està fent res." #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "La configuració d'unsquash és incorrecta." #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "El nucli actual no admet el sistema de fitxers per a \"{}\" ({})." #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de fitxers font \"{}\" no existeix." #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "No s’ha pogut trobar unsquashfs. Assegureu-vos que teniu el paquet squashfs-" "tools instal·lat." #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinació \"{}\" en el sistema de destinació no és un directori." #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "No es pot escriure el fitxer de configuració del KDM." #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "El fitxer de configuració del KDM {!s} no existeix." #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'LXDM." #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "El fitxer de configuració de l'LXDM {!s} no existeix." #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "No es pot escriure el fitxer de configuració del LightDM." #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "El fitxer de configuració del LightDM {!s} no existeix." #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "No es pot configurar el LightDM." #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "No hi ha benvinguda instal·lada per al LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "No es pot escriure el fitxer de configuració de l'SLIM." #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "El fitxer de configuració de l'SLIM {!s} no existeix." #: src/modules/displaymanager/main.py:906 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:907 msgid "" "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:989 msgid "Display manager configuration was incomplete" msgstr "La configuració del gestor de pantalla no era completa." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "S'està configurant mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "S’està configurant l'intercanvi encriptat." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "S'estan instal·lant les dades." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura els serveis d'OpenRC" #: 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: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: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: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:101 msgid "Target runlevel does not exist" msgstr "El nivell d'execució de destinació no existeix." #: 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:110 msgid "Target service does not exist" msgstr "El servei de destinació no existeix." #: 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:27 msgid "Configure Plymouth theme" msgstr "Configura el tema del Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instal·la els paquets." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "S'estan processant els paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "S'està instal·lant un paquet." msgstr[1] "S'està instal·lant %(num)d paquets." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "S’està eliminant un paquet." msgstr[1] "S’està eliminant %(num)d paquets." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Configuració del rellotge del maquinari." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Creació d’initramfs amb mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El codi d'eixida ha estat {}" #: 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 "Es configuren initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuració del servei OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Escriptura d’fstab." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tasca de python de proves." #: 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 de proves {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "Configuració d’idioma." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "S'està guardant la configuració de la xarxa." calamares-3.2.41.1/lang/python/cs_CZ/000077500000000000000000000000001410275732300171375ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/cs_CZ/LC_MESSAGES/000077500000000000000000000000001410275732300207245ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/cs_CZ/LC_MESSAGES/python.po000066400000000000000000000337061410275732300226160ustar00rootroot00000000000000# 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: # pavelrz, 2017 # LiberteCzech , 2020 # Pavel Borecki , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pavel Borecki , 2020\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Nastavování zavaděče GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Připojování oddílů." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Chyba nastavení" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Pro
{!s}
nejsou zadány žádné oddíly." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Nastavit služby systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Nedaří se zapnout systemd službu {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Nedaří se vypnout systemd cíl {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedaří se maskovat systemd jednotku {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Neznámé systemd příkazy {command!s} a {suffix!s} " "pro jednotku {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Odpojit souborové systémy." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Naplňování souborových systémů." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync se nezdařilo s chybových kódem {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Rozbalování obrazu {}/{}, soubor {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Zahajování rozbalení {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Nepodařilo se rozbalit obraz „{}“" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Žádný přípojný bot pro kořenový oddíl" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Chybný přípojný bod pro kořenový oddíl" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Chybná nastavení unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový souborový systém „{}“ neexistuje" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Nepodařilo se nalézt unsquashfs – ověřte, že máte nainstalovaný balíček " "squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Soubor s nastaveními pro LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Nedaří se nastavit LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Není nainstalovaný žádný LightDM přivítač" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Nedaří se zapsat soubor s nastaveními pro SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Soubor s nastaveními pro SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "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 jak " "bothglobalstorage, tak v displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Nastavení správce displeje nebylo úplné" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Nastavování mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Nastavování šifrovaného prostoru pro odkládání stránek paměti." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalace dat." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Nastavit OpenRC služby" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." 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: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:101 msgid "Target runlevel does not exist" msgstr "Cílová úroveň chodu (runlevel) neexistuje" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Popis umístění pro úroveň chodu (runlevel) {level!s} je " "{path!s}, keterá neexistuje." #: 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:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Popis umístění pro službu {name!s} je {path!s}, která " "neexistuje." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Nastavit téma vzhledu pro Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalovat balíčky." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Zpracovávání balíčků (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Je instalován jeden balíček." 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Odebírá se jeden balíček." 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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 "Instalace zavaděče systému." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Nastavování hardwarových hodin." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Vytváření initramfs s mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Návratový kód byl {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Nastavování služby OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisování fstab." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Testovací úloha python." #: 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:30 msgid "Configuring locales." msgstr "Nastavování místních a jazykových nastavení." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Ukládání nastavení sítě." calamares-3.2.41.1/lang/python/da/000077500000000000000000000000001410275732300165225ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/da/LC_MESSAGES/000077500000000000000000000000001410275732300203075ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/da/LC_MESSAGES/python.po000066400000000000000000000321701410275732300221730ustar00rootroot00000000000000# 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: # Dan Johansen, 2017 # scootergrisen, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurer GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Monterer partitioner." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Fejl ved konfiguration" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Der er ikke angivet nogle partitioner som
{!s}
kan bruge." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfigurer systemd-tjenester" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Kan ikke aktivere systemd-tjenesten {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Kan ikke deaktivere systemd-målet {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan ikke maskere systemd-enheden {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ukendte systemd-kommandoer {command!s} og " "{suffix!s} til enheden {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Afmonter filsystemer." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Udfylder filsystemer." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync mislykkede med fejlkoden {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Udpakker aftrykket {}/{}, filen {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Begynder at udpakke {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Kunne ikke udpakke aftrykket \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Intet monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Dårligt monteringspunkt til rodpartition" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint er \"{}\", hvilket ikke findes, gør intet" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Dårlig unsquash-konfiguration" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Kildefilsystemet \"{}\" findes ikke" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Kunne ikke finde unsquashfs, sørg for at pakken squashfs-tools er " "installeret" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Kan ikke skrive KDM-konfigurationsfil" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Kan ikke skrive LXDM-konfigurationsfil" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Kan ikke skrive LightDM-konfigurationsfil" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Kan ikke konfigurere LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Der er ikke installeret nogen LightDM greeter." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Kan ikke skrive SLIM-konfigurationsfil" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfigurationsfil {!s} findes ikke" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Displayhåndteringerlisten er tom eller udefineret i både globalstorage og " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Displayhåndtering-konfiguration er ikke komplet" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurerer mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Der er ikke angivet noget rodmonteringspunkt som
{!s}
kan bruge." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Konfigurerer krypteret swap." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installerer data." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurer OpenRC-tjenester" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Ukendt tjenestehandling {arg!s} til tjenesten {name!s} i " "kørselsniveauet {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}-kald i chroot returnerede fejlkoden {num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Stien til kørselsniveauet {level!s} er {path!s}, som ikke " "findes." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Måltjenesten findes ikke" #: 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:27 msgid "Configure Plymouth theme" msgstr "Konfigurer Plymouth-tema" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installér pakker." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Forarbejder pakker (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Opretter initramfs med mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Afslutningskoden var {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerer OpenRC dmcrypt-tjeneste." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfigurerer lokaliteter." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Gemmer netværkskonfiguration." calamares-3.2.41.1/lang/python/de/000077500000000000000000000000001410275732300165265ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/de/LC_MESSAGES/000077500000000000000000000000001410275732300203135ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/de/LC_MESSAGES/python.po000066400000000000000000000332021410275732300221740ustar00rootroot00000000000000# 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: # Adriaan de Groot , 2020 # Gustav Gyges, 2020 # Andreas Eitel , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Andreas Eitel , 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB konfigurieren." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Hänge Partitionen ein." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Konfigurationsfehler" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Konfiguriere systemd-Dienste" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Der systemd-Dienst {name!s} kann nicht aktiviert werden." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Das systemd-Ziel {name!s} kann nicht deaktiviert werden." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Die systemd-Einheit {name!s} kann nicht maskiert werden." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Unbekannte systemd-Befehle {command!s} und " "{suffix!s} für Einheit {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Dateisysteme aushängen." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Befüllen von Dateisystemen." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync fehlgeschlagen mit Fehlercode {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Abbilddatei Entpacken {}/{}, Datei {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Beginn des Entpackens {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Entpacken der Abbilddatei \"{}\" fehlgeschlagen" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Kein Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Ungültiger Einhängepunkt für die Root-Partition" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint ist \"{}\", welcher nicht existiert, tue nichts" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Ungültige unsquash-Konfiguration" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Das Quelldateisystem \"{}\" existiert nicht" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Konnte unsquashfs nicht finden, stellen Sie sicher, dass Sie das Paket " "namens squashfs-tools installiert haben" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Das Ziel \"{}\" im Zielsystem ist kein Verzeichnis" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Schreiben der KDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Schreiben der LXDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Schreiben der LightDM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Konfiguration von LightDM ist nicht möglich" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Keine Benutzeroberfläche für LightDM installiert." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Schreiben der SLIM-Konfigurationsdatei nicht möglich" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-Konfigurationsdatei {!s} existiert nicht" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Keine Displaymanager für das Displaymanager-Modul ausgewählt." #: src/modules/displaymanager/main.py:907 msgid "" "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:989 msgid "Display manager configuration was incomplete" msgstr "Die Konfiguration des Displaymanager war unvollständig." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfiguriere mkinitcpio. " #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfiguriere verschlüsselten Auslagerungsspeicher." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installiere Daten." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfiguriere OpenRC-Dienste" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Unbekannte Aktion {arg!s} für Dienst {name!s} in Runlevel " "{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} Aufruf in chroot lieferte Fehlercode {num!s} " "zurück." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Vorgesehenes Runlevel existiert nicht" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Der Pfad für Runlevel {level!s} ist {path!s}, welcher nicht " "existiert." #: 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:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Der Pfad für den Dienst {name!s} is {path!s}, welcher nicht " "existiert." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfiguriere Plymouth-Thema" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Pakete installieren " #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Verarbeite Pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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 "Installiere Bootloader." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Einstellen der Hardware-Uhr." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Erstelle initramfs mit mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Der Exit-Code war {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriere den dmcrypt-Dienst von OpenRC." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Schreibe fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfiguriere Lokalisierungen." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Speichere Netzwerkkonfiguration." calamares-3.2.41.1/lang/python/el/000077500000000000000000000000001410275732300165365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/el/LC_MESSAGES/000077500000000000000000000000001410275732300203235ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/el/LC_MESSAGES/python.po000066400000000000000000000242601410275732300222100ustar00rootroot00000000000000# 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: # Efstathios Iosifidis , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Efstathios Iosifidis , 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "εγκατάσταση πακέτων." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/en_GB/000077500000000000000000000000001410275732300171105ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/en_GB/LC_MESSAGES/000077500000000000000000000000001410275732300206755ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/en_GB/LC_MESSAGES/python.po000066400000000000000000000245731410275732300225710ustar00rootroot00000000000000# 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: # Jason Collins , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Jason Collins , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Unmount file systems." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Install packages." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processing packages (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/eo/000077500000000000000000000000001410275732300165415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/eo/LC_MESSAGES/000077500000000000000000000000001410275732300203265ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/eo/LC_MESSAGES/python.po000066400000000000000000000245541410275732300222210ustar00rootroot00000000000000# 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: # Kurt Ankh Phoenix , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Demeti dosieraj sistemoj." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instali pakaĵoj." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Prilaborante pakaĵoj (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/es/000077500000000000000000000000001410275732300165455ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es/LC_MESSAGES/000077500000000000000000000000001410275732300203325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es/LC_MESSAGES/python.po000066400000000000000000000342631410275732300222230ustar00rootroot00000000000000# 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: # 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 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Pier Jose Gotta Perez , 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configure GRUB - menú de arranque multisistema -" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montando particiones" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Error de configuración" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "No hay definidas particiones en 1{!s}1 para usar." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar servicios de systemd" #: 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: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}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "No se puede activar el servicio de systemd {name!s}." #: 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}." #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." msgstr "No se puede desactivar el objetivo de systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "No se puede enmascarar la unidad de systemd {name!s}." #: src/modules/services-systemd/main.py:73 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}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmontar sistemas de archivos." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Rellenando los sistemas de archivos." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Falló la sincronización mediante rsync con el código de error {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Desempaquetando la imagen {}/{}, archivo {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Iniciando el desempaquetado {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "No se pudo desempaquetar la imagen «{}»" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" "No especificó un punto de montaje para la partición raíz - / o root -" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Punto de montaje no válido para una partición raíz," #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Configuración de \"unsquash\" no válida" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "El sistema de archivos para \"{}\" ({}) no es compatible con su kernel " "actual" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de archivos de origen \"{}\" no existe" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "No se encontró unsquashfs; cerciórese de que tenga instalado el paquete " "squashfs-tools" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destino \"{}\" en el sistema escogido no es una carpeta" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de KDM no existe" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuracion {!s} de LXDM no existe" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de LightDM no existe" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "No está instalado el menú de bienvenida LightDM" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "El archivo de configuración {!s} de SLIM no existe" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" "No se ha seleccionado ningún gestor de pantalla para el modulo " "displaymanager" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "La configuración del gestor de pantalla estaba incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio - sistema de arranque básico -." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" "No se facilitó un punto de montaje raíz utilizable para
{!s}
" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Configurando la memoria de intercambio - swap - encriptada." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando datos." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configure servicios del sistema de inicio OpenRC" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." 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: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}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "El rango de ejecución objetivo no existe" #: 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." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "El servicio objetivo no existe" #: 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." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configure el tema de Plymouth - menú de bienvenida." #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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 gestor de arranque." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 el reloj de la computadora." #: 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 "El código de salida fue {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "" "Creando initramfs - sistema de arranque - con dracut - su constructor -." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Falló en ejecutar dracut - constructor de arranques - en el objetivo" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Configurando initramfs - sistema de inicio -." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando el servicio - de arranque encriptado -. OpenRC dmcrypt" #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Escribiendo la tabla de particiones fstab" #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarea de python ficticia." #: 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" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "Configurando especificaciones locales o regionales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Guardando la configuración de red." calamares-3.2.41.1/lang/python/es_MX/000077500000000000000000000000001410275732300171515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_MX/LC_MESSAGES/000077500000000000000000000000001410275732300207365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_MX/LC_MESSAGES/python.po000066400000000000000000000321621410275732300226230ustar00rootroot00000000000000# 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: # guillermo pacheco , 2018 # Logan 8192 , 2018 # Erland Huaman , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montando particiones." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Error de configuración" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "No hay particiones definidas para que
{!s}
use." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura los servicios de systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "No se puede habilitar el servicio {name!s} de systemd." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" "No se puede deshabilitar el objetivo {name!s} de systemd." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "No se puede enmascarar la unidad {name!s} de systemd." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Desmontar sistemas de archivo." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Llenando sistema de archivos." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync falló con código de error {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Desempaquetando imagen {}/{}, archivo {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Iniciando a desempaquetar {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Se falló en la desempaquetización de la imagen \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "No existe punto de montaje para la partición raíz" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "el globalstorage no contiene una llave \"rootMountPoint\", no se hace nada" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Mal punto de montaje para la partición raíz" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint es \"{}\", el cual no existe, no se hace nada" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Mala configuración del paquete unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "El sistema de archivos fuente \"{}\" no existe" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Falla buscando unsquashfs, asegúrate de tener el paquete squashfs-tools " "instalado" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "El destino \"{}\" en el sistema objetivo no es un directorio" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "No se puede escribir el archivo de configuración de KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "El archivo de configuración de KDM {!s} no existe" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "No se puede escribir el archivo de configuración de LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "El archivo de configuración de LXDM {!s} no existe" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "No se puede escribir el archivo de configuración de LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "El archivo de configuración de LightDM {!s} no existe" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "No se puede configurar LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM greeter no está instalado." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "No se puede escribir el archivo de configuración de SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "No se seleccionaron gestores para el módulo de gestor de pantalla." #: src/modules/displaymanager/main.py:907 msgid "" "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:989 msgid "Display manager configuration was incomplete" msgstr "La configuración del gestor de pantalla estaba incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Configurando la swap encriptada." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando data." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura los 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 "" #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "El nivel de ejecución del objetivo no existe" #: 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 "El servicio objetivo no existe" #: 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 "Configurando el tema de Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Procesando paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removiendo un paquete." msgstr[1] "Removiendo %(num)dpaquetes." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 el reloj del hardware." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Creando initramfs con mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "El código de salida fue {}" #: 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 "Configurando initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando el servicio OpenRc dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Escribiento fstab." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Trabajo python ficticio." #: 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:30 msgid "Configuring locales." msgstr "Configurando locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Guardando configuración de red." calamares-3.2.41.1/lang/python/es_PE/000077500000000000000000000000001410275732300171315ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_PE/LC_MESSAGES/000077500000000000000000000000001410275732300207165ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_PE/LC_MESSAGES/python.po000066400000000000000000000240121410275732300225760ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Spanish (Peru) (https://www.transifex.com/calamares/teams/20061/es_PE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_PE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/es_PR/000077500000000000000000000000001410275732300171465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_PR/LC_MESSAGES/000077500000000000000000000000001410275732300207335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/es_PR/LC_MESSAGES/python.po000066400000000000000000000240211410275732300226130ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_PR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/et/000077500000000000000000000000001410275732300165465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/et/LC_MESSAGES/000077500000000000000000000000001410275732300203335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/et/LC_MESSAGES/python.po000066400000000000000000000252301410275732300222160ustar00rootroot00000000000000# 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: # Madis Otenurm, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Haagi failisüsteemid lahti." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM seadistamine ebaõnnestus" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM-konfiguratsioonifaili ei saa kirjutada" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-konfiguratsioonifail {!s} puudub" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Paigalda paketid." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakkide töötlemine (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/eu/000077500000000000000000000000001410275732300165475ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/eu/LC_MESSAGES/000077500000000000000000000000001410275732300203345ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/eu/LC_MESSAGES/python.po000066400000000000000000000255351410275732300222270ustar00rootroot00000000000000# 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: # Ander Elortondo, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Fitxategi sistemak desmuntatu." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Ezin da KDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Ezin da LXDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Ezin da LightDM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Ezin da LightDM konfiguratu" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Ez dago LightDM harrera instalatua." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Ezin da SLIM konfigurazio fitxategia idatzi" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurazio fitxategia {!s} ez da existitzen" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" "Ez da pantaila kudeatzailerik aukeratu pantaila-kudeatzaile modulurako." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Pantaila kudeatzaile konfigurazioa osotu gabe" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalatu paketeak" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketeak prozesatzen (%(count)d/ %(total)d) " #: src/modules/packages/main.py:62 #, 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakete bat kentzen." msgstr[1] "%(num)dpakete kentzen." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/fa/000077500000000000000000000000001410275732300165245ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fa/LC_MESSAGES/000077500000000000000000000000001410275732300203115ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fa/LC_MESSAGES/python.po000066400000000000000000000341041410275732300221740ustar00rootroot00000000000000# 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: # Danial Behzadi , 2020 # alireza jamshidi , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: alireza jamshidi , 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" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "در حال پیکربندی گراب." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "در حال سوار کردن افرازها." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "خطای پیکربندی" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "هیچ افرازی برای استفادهٔ
{!s}
تعریف نشده." #: 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 "" "فراخوانی systemctl {arg!s} در chroot رمز خطای {num!s} را " "برگرداند." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را به کار انداخت." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "نمی‌توان هدف سیستم‌دی {name!s} را به کار انداخت." #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." msgstr "نمی‌توان خدمت سیستم‌دی {name!s} را از کار انداخت." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "نمی‌توان واحد سیستم‌دی {name!s} را پوشاند." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "پیاده کردن سامانه‌های پرونده." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "در حال پر کردن سامانه‌پرونده‌ها." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "آرسینک با رمز خطای {} شکست خورد." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "در حال بسته‌گشایی تصویر {}/{}، پروندهٔ {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "در حال شروع بسته‌گشایی {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "شکست در بسته‌گشایی تصویر {}" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "هیچ نقطهٔ اتّصالی برای افراز ریشه وجود ندارد" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage کلید rootMountPoint را ندارد. کاری انجام نمی‌شود" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "نقطهٔ اتّصال بد برای افراز ریشه" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "نقطهٔ اتّصال ریشه {} است که وجود ندارد. کاری انجام نمی‌شود" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "پیکربندی بد unsquash" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "کرنل کنونیتان از سامانه‌پروندهٔ {} ({}) پشتیبانی نمی‌کند" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "سامانهٔ پروندهٔ مبدأ {} وجود ندارد" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "شکست در یافتن unsquashfs. مطمئن شوید بستهٔ squashfs-tools نصب است" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "مقصد {} در سامانهٔ هدف، یک شاخه نیست" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی KDM را نوشت" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LXDM را نوشت" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "نمی‌توان LightDM را پیکربندی کرد" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "هیچ خوش‌آمدگوی LightDMای نصب نشده." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "نمی‌توان پروندهٔ پیکربندی LightDM را نوشت" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "پروندهٔ پیکربندی {!s} وجود ندارد" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "هیچ مدیر نمایشی برای پیمانهٔ displaymanager گزیده نشده." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "پیکربندی مدیر نمایش کامل نبود" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "پیکربندی mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "هیچ نقطهٔ اتّصال ریشه‌ای برای استفادهٔ
{!s}
داده نشده." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "در حال پیکربندی مبادلهٔ رمزشده." #: 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} را به سطح اجرایی {level!s} افزود." #: 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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "نصب بسته‌ها." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "در حال پردازش بسته‌ها (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "در حال نصب یک بسته." msgstr[1] "در حال نصب %(num)d بسته." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "در حال برداشتن یک بسته." msgstr[1] "در حال برداشتن %(num)d بسته." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "در حال ایجاد 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 "در حال پیکربندی خدمت dmcrypt OpenRC." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "در حال نوشتن fstab." #: src/modules/fstab/main.py:389 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:30 msgid "Configuring locales." msgstr "پیکربندی مکانها" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "در حال ذخیرهٔ پیکربندی شبکه." calamares-3.2.41.1/lang/python/fi_FI/000077500000000000000000000000001410275732300171125ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fi_FI/LC_MESSAGES/000077500000000000000000000000001410275732300206775ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fi_FI/LC_MESSAGES/python.po000066400000000000000000000333541410275732300225700ustar00rootroot00000000000000# 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: # Kimmo Kujansuu , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kimmo Kujansuu , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Määritä GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Yhdistä osiot." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Määritysvirhe" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Ei ole määritetty käyttämään osioita
{!s}
." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Määritä systemd palvelut" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd-palvelua ei saa käyttöön {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Systemd-kohdetta ei saa käyttöön {name!s}." #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd-kohdetta ei-voi poistaa käytöstä {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Ei voi peittää systemd-yksikköä {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Tuntematon systemd komento {command!s} ja " "{suffix!s} laite {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Irrota tiedostojärjestelmät käytöstä." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Paikannetaan tiedostojärjestelmiä." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync epäonnistui virhekoodilla {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Kuvan purkaminen {}/{}, tiedosto {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Pakkauksen purkaminen alkaa {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Kuvan purkaminen epäonnistui \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Ei liitoskohtaa juuri root osiolle" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Huono kiinnityspiste root-osioon" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint on \"{}\", jota ei ole, eikä tee mitään" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Huono epäpuhdas kokoonpano" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Tiedostojärjestelmä \"{}\" ({}) ei tue sinun nykyistä kerneliä " #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Lähde tiedostojärjestelmää \"{}\" ei ole olemassa" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ei löytynyt unsquashfs, varmista, että sinulla on squashfs-tools paketti " "asennettuna" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Kohdejärjestelmän \"{}\" kohde ei ole hakemisto" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM määritysvirhe" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM ei ole asennettu." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM-määritystiedostoa ei voi kirjoittaa" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM-määritystiedostoa {!s} ei ole olemassa" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanager-moduulia varten ei ole valittu näyttönhallintaa." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Luettelo on tyhjä tai määrittelemätön, sekä globalstorage, että " "displaymanager.conf tiedostossa." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Näytönhallinnan kokoonpano oli puutteellinen" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Määritetään mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Root-juuri kiinnityspistettä
{!s}
ei ole annettu käytettäväksi." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Salatun swapin määrittäminen." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Asennetaan tietoja." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Määritä OpenRC-palvelut" #: 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}." #: 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}." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Tuntematon huoltotoiminto{arg!s} palvelun {name!s} " "palvelutasolle {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} palautti chrootissa virhekoodin {num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Kohde runlevel ei ole olemassa" #: 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:110 msgid "Target service does not exist" msgstr "Kohdepalvelua ei ole" #: 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:27 msgid "Configure Plymouth theme" msgstr "Määritä Plymouthin teema" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Asenna paketit." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakettien käsittely (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Asentaa " msgstr[1] "Asentaa %(num)d paketteja." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Removing one package." msgstr[1] "Poistaa %(num)d paketteja." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Paketinhallinnan virhe" #: src/modules/packages/main.py:589 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:601 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:629 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." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Bootloader asennusvirhe" #: src/modules/bootloader/main.py:503 msgid "" "The bootloader could not be installed. The installation command " "
{!s}
returned error code {!s}." msgstr "" "Bootloaderia ei voitu asentaa. Asennuskomento
{!s}
palautti " "virhekoodin {!s}." #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." msgstr "Laitteiston kellon asettaminen." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Initramfs luominen mkinitfs avulla." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Kohteen mkinitfs-suoritus epäonnistui." #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Poistumiskoodi oli {}" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." msgstr "Initramfs luominen dracut:lla." #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" msgstr "Dracut-ohjelman suorittaminen ei onnistunut" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Määritetään initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt-palvelun määrittäminen." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Fstab kirjoittaminen." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "Ei
{!s}
määritys annetaan
{!s}
varten." #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Harjoitus python job." #: 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 {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "Määritetään locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Tallennetaan verkon määrityksiä." calamares-3.2.41.1/lang/python/fr/000077500000000000000000000000001410275732300165455ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fr/LC_MESSAGES/000077500000000000000000000000001410275732300203325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fr/LC_MESSAGES/python.po000066400000000000000000000341241410275732300222170ustar00rootroot00000000000000# 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: # Paul Combal , 2017 # Abdellah B , 2017 # Aestan , 2018 # Jeremy Gourmel , 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configuration du GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montage des partitions." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Erreur de configuration" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Configurer les services systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Impossible d'activer le service systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Impossible de désactiver la cible systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossible de masquer l'unit systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Commandes systemd {command!s} et {suffix!s} " "inconnues pour l'unit {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Démonter les systèmes de fichiers" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Remplir les systèmes de fichiers." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync a échoué avec le code d'erreur {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Décompression de l'image {}/{}, fichier {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Commencer à décompresser {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Impossible de décompresser l'image \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Pas de point de montage pour la partition racine" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Mauvais point de montage pour la partition racine" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Mauvaise configuration unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Le système de fichiers source \"{}\" n'existe pas" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Échec de la recherche de unsquashfs, assurez-vous que le paquetage squashfs-" "tools est installé." #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Impossible d'écrire le fichier de configuration KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Le fichier de configuration KDM n'existe pas" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Le fichier de configuration LXDM n'existe pas" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Impossible d'écrire le fichier de configuration LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Le fichier de configuration LightDM {!S} n'existe pas" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Impossible de configurer LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Aucun hôte LightDM est installé" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Impossible d'écrire le fichier de configuration SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Le fichier de configuration SLIM {!S} n'existe pas" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "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 à la fois dans " "globalstorage et displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "La configuration du gestionnaire d'affichage était incomplète" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configuration de mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Configuration du swap chiffrée." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installation de données." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurer les services OpenRC" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Service-action {arg!s} inconnue pour le service {name!s} dans " "le 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'appel rc-update {arg!s} dans chroot a renvoyé le code " "d'erreur {num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Le chemin pour le runlevel {level!s} est {path!s}, qui n'existe" " pas." #: 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:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Le chemin pour le service {name!s} est {path!s}, qui n'existe " "pas." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurer le thème Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installer les paquets." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Traitement des paquets (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Création d'initramfs avec mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Le code de sortie était {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configuration du service OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Écriture du fstab." #: src/modules/fstab/main.py:389 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 de python" #: 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 de python {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "Configuration des locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Sauvegarde de la configuration du réseau en cours." calamares-3.2.41.1/lang/python/fr_CH/000077500000000000000000000000001410275732300171175ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fr_CH/LC_MESSAGES/000077500000000000000000000000001410275732300207045ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fr_CH/LC_MESSAGES/python.po000066400000000000000000000240171410275732300225710ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/fur/000077500000000000000000000000001410275732300167325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fur/LC_MESSAGES/000077500000000000000000000000001410275732300205175ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/fur/LC_MESSAGES/python.po000066400000000000000000000332241410275732300224040ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "Montaç des partizions." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Erôr di configurazion" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "No je stade definide nissune partizion di doprâ par
{!s}
." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" "Impussibil disabilitâ la destinazion di systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Impussibil mascarâ la unitât di systemd {name!s}." #: src/modules/services-systemd/main.py:73 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/umount/main.py:31 msgid "Unmount file systems." msgstr "Dismonte i file-systems." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Daûr a jemplâ i filesystems." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Sincronizazion cun rsync falide cun codiç di erôr {}. " #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Estrazion imagjin {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Daûr a scomençâ la estrazion {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "No si è rivâts a estrai la imagjin \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nissun pont di montaç pe partizion lidrîs" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nol conten une clâf \"rootMountPoint\", duncje no si fâs nuie" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Pont di montaç sbaliât pe partizion lidrîs" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint al è \"{}\", che nol esist, duncje no si fâs nuie" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Configurazion di \"unsquash\" sbaliade" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorzint \"{}\" nol esist" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "No si è rivâts a cjatâ unsquashfs, controle di vê instalât il pachet " "squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Impussibil scrivi il file di configurazion di KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazion di KDM {!s} nol esist" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Impussibil scrivi il file di configurazion di LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazion di LXDM {!s} nol esist" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Impussibil scrivi il file di configurazion di LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazion di LightDM {!s} nol esist" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Impussibil configurâ LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nissun menù di benvignût par LightDM instalât." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Impussibil scrivi il file di configurazion SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazion di SLIM {!s} nol esist" #: src/modules/displaymanager/main.py:906 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:907 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:989 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:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Daûr a configurâ la memorie di scambi (swap) cifrade." #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instale pachets." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazion dai pachets (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "Daûr a configurâ la localizazion." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Salvament de configurazion di rêt." calamares-3.2.41.1/lang/python/gl/000077500000000000000000000000001410275732300165405ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/gl/LC_MESSAGES/000077500000000000000000000000001410275732300203255ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/gl/LC_MESSAGES/python.po000066400000000000000000000256741410275732300222240ustar00rootroot00000000000000# 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: # Xosé, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmontar sistemas de ficheiros." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "O ficheiro de configuración de KDM {!s} non existe" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LXDM {!s} non existe" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "O ficheiro de configuración de LightDM {!s} non existe" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Non é posíbel configurar LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Non se instalou o saudador de LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Non é posíbel escribir o ficheiro de configuración de SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "O ficheiro de configuración de SLIM {!s} non existe" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "A configuración do xestor de pantalla foi incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalar paquetes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A procesar paquetes (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/gu/000077500000000000000000000000001410275732300165515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/gu/LC_MESSAGES/000077500000000000000000000000001410275732300203365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/gu/LC_MESSAGES/python.po000066400000000000000000000237761410275732300222360ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/he/000077500000000000000000000000001410275732300165325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/he/LC_MESSAGES/000077500000000000000000000000001410275732300203175ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/he/LC_MESSAGES/python.po000066400000000000000000000365631410275732300222150ustar00rootroot00000000000000# 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: # Eli Shleifer , 2017 # Omer I.S. , 2020 # Yaron Shahrabani , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yaron Shahrabani , 2021\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "הגדרת GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "מחיצות מעוגנות." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "שגיאת הגדרות" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "לא הוגדרו מחיצות לשימוש של
{!s}
." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "לא ניתן להשבית את היעד של systemd בשם {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "לא ניתן למסך את היחידה של systemd בשם {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "פקודות לא ידועות של systemd‏ {command!s} " "ו־{suffix!s} עבור היחידה {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "ניתוק עיגון מערכות קבצים." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "מערכות הקבצים מתמלאות." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync נכשל עם קוד השגיאה {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "קובץ הדמות נפרס {}/{}, קובץ {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "הפריסה של {} מתחילה" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "פריסת קובץ הדמות \"{}\" נכשלה" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "אין נקודת עגינה למחיצת העל" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "ב־globalstorage אין את המפתח „rootMountPoint”, לא תתבצע אף פעולה" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "נקודת העגינה של מחיצת השורה שגויה" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint מוגדרת בתור „{}”, שאינו קיים, לא תתבצע אף פעולה" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "תצורת unsquash שגויה" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "מערכת הקבצים עבור „{}” ‏({}) אינה נתמכת על ידי הליבה הנוכחית שלך." #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "מערכת הקבצים במקור „{}” אינה קיימת" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "איתור unsquashfs לא צלח, נא לוודא שהחבילה squashfs-tools מותקנת" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "היעד „{}” במערכת הקבצים המיועדת אינו תיקייה" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "קובץ התצורה של KDM ‏{!s} אינו קיים" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "קובץ התצורה של LXDM ‏{!s} אינו קיים" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "לא ניתן לכתוב את קובץ התצורה של LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "קובץ התצורה של LightDM ‏{!s} אינו קיים" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "לא ניתן להגדיר את LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "לא מותקן מקבל פנים מסוג LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "לא ניתן לכתוב קובץ תצורה של SLIM." #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "קובץ התצורה {!s} של SLIM אינו קיים" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "לא נבחרו מנהלי תצוגה למודול displaymanager." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "רשימת מנהלי התצוגה ריקה או שאינה מוגדרת גם באחסון הכללי (globalstorage) וגם " "ב־displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "תצורת מנהל התצוגה אינה שלמה" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio מותקן." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "לא סופקה נקודת עגינת שורש לשימוש של
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "מוגדר שטח החלפה מוצפן." #: 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} לשכבת ההפעלה {level!s}." #: 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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "service-action‏ (פעולת שירות) {arg!s} בלתי ידועה עבור השירות " "{name!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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "התקנת חבילות." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "החבילות מעובדות (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "מותקנת חבילה אחת." msgstr[1] "מותקנות %(num)d חבילות." msgstr[2] "מותקנות %(num)d חבילות." msgstr[3] "מותקנות %(num)d חבילות." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "מתבצעת הסרה של חבילה אחת." msgstr[1] "מתבצעת הסרה של %(num)d חבילות." msgstr[2] "מתבצעת הסרה של %(num)d חבילות." msgstr[3] "מתבצעת הסרה של %(num)d חבילות." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "שגיאת מנהל חבילות" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "מנהל החבילות לא הצליח להכין את העדכונים. הפקודה
{!s}
החזירה את " "קוד השגיאה {!s}." #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "מנהל החבילות לא הצליח לעדכן את המערכת. הפקודה
{!s}
החזירה את קוד " "השגיאה {!s}." #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "שגיאת התקנת מנהל אתחול" #: src/modules/bootloader/main.py:503 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 "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 "שירות dmcrypt ל־OpenRC מוגדר." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab נכתב." #: src/modules/fstab/main.py:389 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:30 msgid "Configuring locales." msgstr "השפות מוגדרות." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "הגדרות הרשת נשמרות." calamares-3.2.41.1/lang/python/hi/000077500000000000000000000000001410275732300165365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hi/LC_MESSAGES/000077500000000000000000000000001410275732300203235ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hi/LC_MESSAGES/python.po000066400000000000000000000435701410275732300222150ustar00rootroot00000000000000# 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: # Panwar108 , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Panwar108 , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: hi\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:30 msgid "Mounting partitions." msgstr "विभाजन माउंट करना।" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "विन्यास त्रुटि" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
के उपयोग हेतु कोई विभाजन परिभाषित नहीं हैं।" #: 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 "chroot में systemctl {arg!s} कॉल त्रुटि कोड {num!s}।" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "systemd लक्ष्य {name!s} निष्क्रिय करना विफल।" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd यूनिट {name!s} को मास्क नहीं किया जा सकता।" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "यूनिट {name!s} हेतु अज्ञात systemd कमांड {command!s} व " "{suffix!s}।" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "फ़ाइल सिस्टम माउंट से हटाना।" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "फाइल सिस्टम भरना।" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync त्रुटि कोड {} के साथ विफल।" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "इमेज फ़ाइल {}/{}, फ़ाइल {}/{} सम्पीड़ित की जा रही है" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "{} हेतु संपीड़न प्रक्रिया आरंभ हो रही है " #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "इमेज फ़ाइल \"{}\" को खोलने में विफल" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "रुट विभाजन हेतु कोई माउंट पॉइंट नहीं है" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage में \"rootMountPoint\" कुंजी नहीं है, कुछ नहीं किया जाएगा" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "रुट विभाजन हेतु ख़राब माउंट पॉइंट" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "रुट माउंट पॉइंट \"{}\" है, जो कि मौजूद नहीं है, कुछ नहीं किया जाएगा" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "ख़राब unsquash विन्यास सेटिंग्स" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) हेतु फ़ाइल सिस्टम आपके वर्तमान कर्नेल द्वारा समर्थित नहीं है" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" स्रोत फ़ाइल सिस्टम मौजूद नहीं है" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsqaushfs खोजने में विफल, सुनिश्चित करें कि squashfs-tools पैकेज इंस्टॉल है" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "लक्षित सिस्टम में \"{}\" स्थान कोई डायरेक्टरी नहीं है" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM विन्यास फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM विन्यास फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM विन्यास फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM विन्यास फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM विन्यास फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM विन्यास फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM को विन्यस्त नहीं किया जा सकता" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "कोई LightDM लॉगिन स्क्रीन इंस्टॉल नहीं है।" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM विन्यास फ़ाइल राइट नहीं की जा सकती" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM विन्यास फ़ाइल {!s} मौजूद नहीं है" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "चयनित डिस्प्ले प्रबंधक मॉड्यूल हेतु कोई डिस्प्ले प्रबंधक नहीं मिला।" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "globalstorage व displaymanager.conf में डिस्प्ले प्रबंधक सूची रिक्त या " "अपरिभाषित है।" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "डिस्प्ले प्रबंधक विन्यास अधूरा था" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio को विन्यस्त करना।" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" "
{!s}
के उपयोग हेतु कोई रुट माउंट पॉइंट प्रदान नहीं किया गया।" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "एन्क्रिप्टेड स्वैप को विन्यस्त करना।" #: 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 "" "रन-लेवल {level!s} में सेवा {name!s} हेतु अज्ञात सेवा-कार्य " "{arg!s}।" #: 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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "पैकेज इंस्टॉल करना।" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "पैकेज (%(count)d / %(total)d) संसाधित किए जा रहे हैं" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "एक पैकेज इंस्टॉल किया जा रहा है।" msgstr[1] "%(num)d पैकेज इंस्टॉल किए जा रहे हैं।" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "एक पैकेज हटाया जा रहा है।" msgstr[1] "%(num)d पैकेज हटाए जा रहे हैं।" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "पैकेज प्रबंधक त्रुटि" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "पैकेज प्रबंधक द्वारा अपडेट तैयार करना विफल। कमांड
{!s}
हेतु " "त्रुटि कोड {!s} प्राप्त।" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "पैकेज प्रबंधक द्वारा सिस्टम अपडेट करना विफल। कमांड
{!s}
हेतु " "त्रुटि कोड {!s} प्राप्त।" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "बूट लोडर इंस्टॉल त्रुटि" #: src/modules/bootloader/main.py:503 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 "लक्ष्य पर 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:389 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:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "डमी पाइथन प्रक्रिया की चरण संख्या {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "स्थानिकी को विन्यस्त करना।" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "नेटवर्क विन्यास सेटिंग्स संचित करना।" calamares-3.2.41.1/lang/python/hr/000077500000000000000000000000001410275732300165475ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hr/LC_MESSAGES/000077500000000000000000000000001410275732300203345ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hr/LC_MESSAGES/python.po000066400000000000000000000340171410275732300222220ustar00rootroot00000000000000# 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: # Lovro Kudelić , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Lovro Kudelić , 2021\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Konfigurirajte GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montiranje particija." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Greška konfiguracije" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Nema definiranih particija za
{!s}
korištenje." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguriraj systemd servise" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Ne mogu omogućiti systemd servis {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Ne mogu onemogućiti systemd cilj {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Ne mogu maskirati systemd jedinicu {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Nepoznata systemd naredba {command!s} i {suffix!s}" " za jedinicu {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Odmontiraj datotečne sustave." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Popunjavanje datotečnih sustava." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync nije uspio s kodom pogreške {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Otpakiravanje slike {}/{}, datoteka {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Početak raspakiravanja {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Otpakiravnje slike nije uspjelo \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nema točke montiranja za root particiju" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Neispravna točka montiranja za root particiju" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint je \"{}\", što ne postoji, ne radi ništa" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Neispravna unsquash konfiguracija" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Izvorni datotečni sustav \"{}\" ne postoji" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Neuspješno pronalaženje unsquashfs, provjerite imate li instaliran paket " "squashfs-tools" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Odredište \"{}\" u ciljnom sustavu nije direktorij" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Ne mogu zapisati KDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Ne mogu zapisati LXDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Ne moku zapisati LightDM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Ne mogu konfigurirati LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nije instaliran LightDM pozdravnik." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Ne mogu zapisati SLIM konfiguracijsku datoteku" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfiguracijska datoteka {!s} ne postoji" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Nisu odabrani upravitelji zaslona za modul displaymanager." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Popis upravitelja zaslona je prazan ili nedefiniran u oba globalstorage i " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Konfiguracija upravitelja zaslona nije bila potpuna" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfiguriranje mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfiguriranje šifriranog swapa." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instaliranje podataka." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurirajte OpneRC servise" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Nepoznat service-action {arg!s} za servis {name!s} u 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} poziv u chroot-u vratio je kod pogreške " "{num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Ciljni runlevel ne postoji" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Putanja za runlevel {level!s} je {path!s}, međutim ona ne " "postoji." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Ciljni servis ne postoji" #: 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:27 msgid "Configure Plymouth theme" msgstr "Konfigurirajte Plymouth temu" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instaliraj pakete." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Obrađujem pakete (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instaliram paket." msgstr[1] "Instaliram %(num)d pakete." msgstr[2] "Instaliram %(num)d pakete." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Uklanjam paket." msgstr[1] "Uklanjam %(num)d pakete." msgstr[2] "Uklanjam %(num)d pakete." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Pogreška upravitelja paketa" #: src/modules/packages/main.py:589 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:601 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:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Greška prilikom instalacije bootloadera" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Stvaranje initramfs s mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Pokretanje mkinitfs na ciljanom sustavu nije uspjelo" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Izlazni kod bio je {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfiguriranje servisa OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisujem fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfiguriranje lokalizacije." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Spremanje mrežne konfiguracije." calamares-3.2.41.1/lang/python/hu/000077500000000000000000000000001410275732300165525ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hu/LC_MESSAGES/000077500000000000000000000000001410275732300203375ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/hu/LC_MESSAGES/python.po000066400000000000000000000324231410275732300222240ustar00rootroot00000000000000# 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: # Adriaan de Groot , 2018 # Balázs Meskó , 2018 # miku84, 2019 # Lajos Pasztor , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB konfigurálása." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Partíciók csatolása." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Konfigurációs hiba" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "systemd szolgáltatások beállítása" #: 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: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:63 #: src/modules/services-systemd/main.py:67 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: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:69 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:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Nem maszkolható systemd egység: {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Ismeretlen systemd parancsok {command!s} és " "{suffix!s} a {name!s} egységhez. " #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Fájlrendszerek leválasztása." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Fájlrendszerek betöltése." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "az rsync elhalt a(z) {} hibakóddal" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kép kicsomagolása nem sikerült" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nincs betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nem tartalmaz \"rootMountPoint\" kulcsot, semmi nem történik" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Rossz betöltési pont a root partíciónál" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Rossz unsquash konfiguráció" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "A forrás fájlrendszer \"{}\" nem létezik" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs nem található, győződj meg róla a squashfs-tools csomag telepítve" " van." #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "A KDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:527 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:588 msgid "Cannot write LXDM configuration file" msgstr "Az LXDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:589 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:672 msgid "Cannot write LightDM configuration file" msgstr "A LightDM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:673 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:747 msgid "Cannot configure LightDM" msgstr "A LightDM nem állítható be" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nincs LightDM üdvözlő telepítve." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "A SLIM konfigurációs fájl nem írható" #: src/modules/displaymanager/main.py:780 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:906 msgid "No display managers selected for the displaymanager module." msgstr "Nincs kijelzőkezelő kiválasztva a kijelzőkezelő modulhoz." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "A kijelzőkezelő konfigurációja hiányos volt" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio konfigurálása." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Titkosított swap konfigurálása." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Adatok telepítése." #: 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: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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Ismeretlen service-action {arg!s} a szolgáltatáshoz {name!s} in" " 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} hívás a chroot-ban hibakódot adott: {num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "A futási-szint elérési útja {level!s} ami {path!s}, nem " "létezik." #: 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: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:27 msgid "Configure Plymouth theme" msgstr "Plymouth téma beállítása" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Csomagok telepítése." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Csomagok feldolgozása (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/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 "A kilépési kód {} volt." #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt szolgáltatás konfigurálása." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab írása." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "nyelvi értékek konfigurálása." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Hálózati konfiguráció mentése." calamares-3.2.41.1/lang/python/id/000077500000000000000000000000001410275732300165325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/id/LC_MESSAGES/000077500000000000000000000000001410275732300203175ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/id/LC_MESSAGES/python.po000066400000000000000000000255011410275732300222030ustar00rootroot00000000000000# 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: # Choiril Abdul, 2018 # harsxv , 2018 # Wantoyèk , 2018 # Drajat Hasan , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Kesalahan Konfigurasi" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Lepaskan sistem berkas." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Gak bisa menulis file konfigurasi KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "File {!s} config KDM belum ada" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Gak bisa menulis file konfigurasi LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "File {!s} config LXDM enggak ada" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Gak bisa menulis file konfigurasi LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "File {!s} config LightDM belum ada" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Gak bisa mengkonfigurasi LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Tiada LightDM greeter yang terinstal." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Gak bisa menulis file konfigurasi SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "File {!s} config SLIM belum ada" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Tiada display manager yang dipilih untuk modul displaymanager." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Konfigurasi display manager belum rampung" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instal paket-paket." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paket pemrosesan (%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Menginstal paket %(num)d" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "mencopot %(num)d paket" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/id_ID/000077500000000000000000000000001410275732300171065ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/id_ID/LC_MESSAGES/000077500000000000000000000000001410275732300206735ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/id_ID/LC_MESSAGES/python.po000066400000000000000000000237611410275732300225650ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Indonesian (Indonesia) (https://www.transifex.com/calamares/teams/20061/id_ID/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: id_ID\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ie/000077500000000000000000000000001410275732300165335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ie/LC_MESSAGES/000077500000000000000000000000001410275732300203205ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ie/LC_MESSAGES/python.po000066400000000000000000000261261410275732300222100ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "Montente partitiones." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Errore de configuration" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Null partition es definit por usa de
{!s}
." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Ne successat depaccar li image \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Ínvalid configuration de unsquash" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Ne successat scrir li file de configuration de KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "File del configuration de KDM {!s} ne existe" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Ne successat scrir li file de configuration de LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "File del configuration de LXDM {!s} ne existe" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Ne successat scrir li file de configuration de LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "File del configuration de LightDM {!s} ne existe" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "File del configuration de SLIM {!s} ne existe" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurante mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installante paccages." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "Configurante locales." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/is/000077500000000000000000000000001410275732300165515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/is/LC_MESSAGES/000077500000000000000000000000001410275732300203365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/is/LC_MESSAGES/python.po000066400000000000000000000244311410275732300222230ustar00rootroot00000000000000# 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: # Kristján Magnússon, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Kristján Magnússon, 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Aftengja skráarkerfi." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Setja upp pakka." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Vinnslupakkar (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/it_IT/000077500000000000000000000000001410275732300171465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/it_IT/LC_MESSAGES/000077500000000000000000000000001410275732300207335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/it_IT/LC_MESSAGES/python.po000066400000000000000000000332471410275732300226250ustar00rootroot00000000000000# 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: # Pierfrancesco Passerini , 2019 # Pietro F. Fontana, 2020 # Saverio , 2020 # Giuseppe Pignataro , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Giuseppe Pignataro , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configura GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montaggio partizioni." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Errore di Configurazione" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Nessuna partizione definita per l'uso con
{!s}
." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configura servizi systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Impossibile abilitare il servizio systemd {name!s}." #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "Impossibile abilitare la destinazione systemd {name!s}." #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." msgstr "" "Impossibile disabilitare la destinazione systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Impossibile mascherare l'unità systemd {name!s}." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Smonta i file system." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Copia dei file system." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync fallita con codice d'errore {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Estrazione immagine {}/{}, file {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Avvio dell'estrazione {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Estrazione dell'immagine \"{}\" fallita" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nessun punto di montaggio per la partizione di root" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage non contiene una chiave \"rootMountPoint\", nessuna azione " "prevista" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Punto di montaggio per la partizione di root errato" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint è \"{}\" ma non esiste, nessuna azione prevista" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Configurazione unsquash errata" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Il filesystem per \"{}\" ({}) non è supportato dal kernel corrente" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Il filesystem sorgente \"{}\" non esiste" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Impossibile trovare unsquashfs, assicurarsi di aver installato il pacchetto " "squashfs-tools" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "La destinazione del sistema \"{}\" non è una directory" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Impossibile scrivere il file di configurazione di KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Il file di configurazione di KDM {!s} non esiste" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Il file di configurazione di LXDM {!s} non esiste" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Impossibile scrivere il file di configurazione di LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Il file di configurazione di LightDM {!s} non esiste" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Impossibile configurare LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nessun LightDM greeter installato." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Impossibile scrivere il file di configurazione di SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Il file di configurazione di SLIM {!s} non esiste" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "L'elenco dei display manager è vuota o non definita sia in globalstorage che" " in displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "La configurazione del display manager è incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurazione di mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "Nessun punto di mount root è dato in l'uso per
{!s}
" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Configurazione per lo swap cifrato." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installazione dei dati." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configura i servizi OpenRC" #: 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: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: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: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:101 msgid "Target runlevel does not exist" msgstr "Il runlevel target non esiste" #: 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:110 msgid "Target service does not exist" msgstr "Il servizio target non esiste" #: 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:27 msgid "Configure Plymouth theme" msgstr "Configura il tema Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installa pacchetti." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Elaborazione dei pacchetti (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Impostazione del clock hardware." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Sto creando initramfs con mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Impossibile eseguire mkinitfs sulla destinazione" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Il codice di uscita era {}" #: 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 "Configurazione di initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurazione del servizio OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Scrittura di fstab." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Job python fittizio." #: 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:30 msgid "Configuring locales." msgstr "Configurazione della localizzazione." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Salvataggio della configurazione di rete." calamares-3.2.41.1/lang/python/ja/000077500000000000000000000000001410275732300165305ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ja/LC_MESSAGES/000077500000000000000000000000001410275732300203155ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ja/LC_MESSAGES/python.po000066400000000000000000000365341410275732300222110ustar00rootroot00000000000000# 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: # ブラシックデービッド, 2019 # Takefumi Nagata, 2019 # UTUMI Hirosi , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: UTUMI Hirosi , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUBを設定にします。" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "パーティションのマウント。" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "コンフィグレーションエラー" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "
{!s}
に使用するパーティションが定義されていません。" #: 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 "" "chroot で systemctl {arg!s} を呼び出すと、エラーコード {num!s} が返されました。" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "{name!s}というsystemdサービスが可能にすることができません" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." msgstr "systemd でターゲット {name!s}が開始できません。" #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." msgstr "systemd でターゲット {name!s}が停止できません。" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "systemd ユニット {name!s} をマスクできません。" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "ユニット {name!s} に対する未知の systemd コマンド {command!s} と " "{suffix!s}。" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "ファイルシステムをアンマウント。" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "ファイルシステムに書き込んでいます。" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "エラーコード {} によりrsyncを失敗。" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "イメージ {}/{}, ファイル {}/{} を解凍しています" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "{} の解凍を開始しています" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "イメージ \"{}\" の展開に失敗" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "ルートパーティションのためのマウントポイントがありません" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage に \"rootMountPoint\" キーが含まれていません。何もしません。" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "ルートパーティションのためのマウントポイントが不正です" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "ルートマウントポイントは \"{}\" ですが、存在しません。何もできません。" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "unsquash の設定が不正です" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) のファイルシステムは、現在のカーネルではサポートされていません" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "ソースファイルシステム \"{}\" は存在しません" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "unsquashfs が見つかりませんでした。 squashfs-toolsがインストールされているか、確認してください。" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "ターゲットシステムの宛先 \"{}\" はディレクトリではありません" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDMの設定ファイルに書き込みができません" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定ファイル {!s} が存在しません" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDMの設定ファイルに書き込みができません" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定ファイル {!s} が存在しません" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDMの設定ファイルに書き込みができません" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定ファイル {!s} が存在しません" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDMの設定ができません" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM greeter がインストールされていません。" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIMの設定ファイルに書き込みができません" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定ファイル {!s} が存在しません" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "ディスプレイマネージャが選択されていません。" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "globalstorage と displaymanager.conf の両方で、displaymanagers リストが空か未定義です。" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "ディスプレイマネージャの設定が不完全です" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpioを設定しています。" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
を使用するのにルートマウントポイントが与えられていません。" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "暗号化したswapを設定しています。" #: 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 "" "ランレベル {level!s} 内のサービス {name!s} に対する未知のサービスアクション {arg!s}。" #: 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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "パッケージのインストール" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "パッケージを処理しています (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] " %(num)d パッケージをインストールしています。" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] " %(num)d パッケージを削除しています。" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "パッケージマネージャーのエラー" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "パッケージマネージャーはアップデートを準備できませんでした。コマンド
{!s}
はエラーコード {!s} を返しました。" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "パッケージマネージャーはシステムをアップデートできませんでした。 コマンド
{!s}
はエラーコード {!s} を返しました。" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "ブートローダーのインストールエラー" #: src/modules/bootloader/main.py:503 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 "ターゲット上で 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:389 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: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:30 msgid "Configuring locales." msgstr "ロケールを設定しています。" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "ネットワーク設定を保存しています。" calamares-3.2.41.1/lang/python/kk/000077500000000000000000000000001410275732300165435ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/kk/LC_MESSAGES/000077500000000000000000000000001410275732300203305ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/kk/LC_MESSAGES/python.po000066400000000000000000000237721410275732300222240ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/kn/000077500000000000000000000000001410275732300165465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/kn/LC_MESSAGES/000077500000000000000000000000001410275732300203335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/kn/LC_MESSAGES/python.po000066400000000000000000000237741410275732300222310ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ko/000077500000000000000000000000001410275732300165475ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ko/LC_MESSAGES/000077500000000000000000000000001410275732300203345ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ko/LC_MESSAGES/python.po000066400000000000000000000344461410275732300222300ustar00rootroot00000000000000# 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: # Ji-Hyeon Gim , 2018 # JungHee Lee , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: JungHee Lee , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB 구성" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "파티션 마운트 중." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "구성 오류" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "사용할
{!s}
에 대해 정의된 파티션이 없음." #: 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 "chroot에서 systemctl {arg!s} 호출에서오류 코드 {num}를 반환 했습니다." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "{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:69 msgid "Cannot disable systemd target {name!s}." msgstr "systemd 대상 {name! s}를 비활성화 할 수 없습니다." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "시스템 유닛 {name! s}를 마스크할 수 없습니다." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "유닛 {name! s}에 대해 알 수 없는 시스템 명령 {command! s}{suffix! " "s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "파일 시스템 마운트를 해제합니다." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "파일 시스템을 채우는 중." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync가 {} 오류 코드로 실패했습니다." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "이미지 {}/{}, 파일 {}/{} 압축푸는 중" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "{} 압축 풀기 시작 중" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" 이미지의 압축을 풀지 못했습니다." #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "루트 파티션에 대한 마운트 위치 없음" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage에는 \"rootMountPoint \" 키가 포함되어 있지 않으며 아무 작업도 수행하지 않습니다." #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "루트 파티션에 대한 잘못된 마운트 위치" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint는 \"{}\"이고, 존재하지 않으며, 아무 작업도 수행하지 않습니다." #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "잘못된 unsquash 구성" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({})에 대한 파일 시스템은 현재 커널에서 지원되지 않습니다." #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" 소스 파일시스템은 존재하지 않습니다." #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "unsquashfs를 찾지 못했습니다. squashfs-tools 패키지가 설치되어 있는지 확인하십시오." #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "대상 시스템의 \"{}\" 목적지가 디렉토리가 아닙니다." #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM 구성 파일을 쓸 수 없습니다." #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM 구성 파일 {! s}가 없습니다" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LMLDM 구성 파일을 쓸 수 없습니다." #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 구성 파일 {!s}이 없습니다." #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM 구성 파일을 쓸 수 없습니다." #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 구성 파일 {!s}가 없습니다." #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM을 구성할 수 없습니다." #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM greeter가 설치되지 않았습니다." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM 구성 파일을 쓸 수 없음" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 구성 파일 {!s}가 없음" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "displaymanager 모듈에 대해 선택된 디스플레이 관리자가 없습니다." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "displaymanagers 목록이 비어 있거나 globalstorage 및 displaymanager.conf 모두에서 정의되지 " "않았습니다." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "디스플레이 관리자 구성이 완료되지 않았습니다." #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "mkinitcpio 구성 중." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "
{!s}
에서 사용할 루트 마운트 지점이 제공되지 않음." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "암호화된 스왑 구성 중." #: 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 "run-level {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 "" "run-level {level!s}의 service {name!s}에 대해 알 수 없는 service-action " "{arg!s}입니다." #: 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: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 "플리머스 테마 구성" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "패키지를 설치합니다." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "패키지 처리중 (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "%(num)d개의 패키지들을 설치하는 중입니다." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "%(num)d개의 패키지들을 제거하는 중입니다." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "패키지 관리자 오류" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "패키지 관리자가 업데이트를 준비할 수 없습니다.
{!s}
명령에서 {!s} 오류 코드를 반환했습니다." #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "패키지 관리자가 시스템을 업데이트할 수 없습니다.
{!s}
명령에서 {!s} 오류 코드를 반환했습니다." #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "부트로더 설치 오류" #: src/modules/bootloader/main.py:503 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 "대상에서 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:389 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:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" msgstr "더미 파이썬 단계 {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "로컬 구성 중." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "네트워크 구성 저장 중." calamares-3.2.41.1/lang/python/ko_KR/000077500000000000000000000000001410275732300171435ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ko_KR/LC_MESSAGES/000077500000000000000000000000001410275732300207305ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ko_KR/LC_MESSAGES/python.po000066400000000000000000000237511410275732300226210ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Korean (Korea) (https://www.transifex.com/calamares/teams/20061/ko_KR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko_KR\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/lo/000077500000000000000000000000001410275732300165505ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lo/LC_MESSAGES/000077500000000000000000000000001410275732300203355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lo/LC_MESSAGES/python.po000066400000000000000000000237301410275732300222230ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lo\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/lt/000077500000000000000000000000001410275732300165555ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lt/LC_MESSAGES/000077500000000000000000000000001410275732300203425ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lt/LC_MESSAGES/python.po000066400000000000000000000346061410275732300222340ustar00rootroot00000000000000# 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: # Mindaugas , 2019 # Moo, 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Moo, 2021\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Konfigūruoti GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Prijungiami skaidiniai." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Konfigūracijos klaida" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Konfigūruoti systemd tarnybas" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Nepavyksta įjungti systemd tarnybos {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Nepavyksta išjungti systemd paskirties {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Nepavyksta maskuoti systemd įtaiso {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Nežinomos systemd komandos {command!s} ir " "{suffix!s} įtaisui {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Atjungti failų sistemas." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Užpildomos failų sistemos." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync patyrė nesėkmę su klaidos kodu {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Išpakuojamas atvaizdis {}/{}, failas {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Pradedama išpakuoti {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Nepavyko išpakuoti atvaizdį „{}“" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nėra prijungimo taško šaknies skaidiniui" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage viduje nėra „rootMountPoint“ rakto, nieko nedaroma" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Blogas šaknies skaidinio prijungimo taškas" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint yra „{}“, kurio nėra, nieko nedaroma" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Bloga unsquash konfigūracija" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Jūsų branduolys nepalaiko failų sistemos, kuri skirta \"{}\" ({})" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Šaltinio failų sistemos „{}“ nėra" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Nepavyko rasti unsquashfs, įsitikinkite, kad esate įdiegę squashfs-tools " "paketą" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Nepavyksta įrašyti KDM konfigūracijos failą" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigūracijos failo {!s} nėra" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Nepavyksta įrašyti LXDM konfigūracijos failą" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigūracijos failo {!s} nėra" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Nepavyksta įrašyti LightDM konfigūracijos failą" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigūracijos failo {!s} nėra" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Nepavyksta konfigūruoti LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Neįdiegtas joks LightDM pasisveikinimas." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Nepavyksta įrašyti SLIM konfigūracijos failą" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigūracijos failo {!s} nėra" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Displaymanagers moduliui nėra pasirinkta jokių ekranų tvarkytuvių." #: src/modules/displaymanager/main.py:907 msgid "" "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 globalstorage, " "tiek ir displaymanager.conf faile." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Ekranų tvarkytuvės konfigūracija yra nepilna" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigūruojama mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfigūruojamas šifruotas sukeitimų skaidinys." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Įdiegiami duomenys." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigūruoti OpenRC tarnybas" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Nežinomas tarnybos veiksmas {arg!s}, skirtas tarnybai {name!s} " "vykdymo lygmenyje {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} iškvieta, esanti chroot, grąžino klaidos kodą" " {num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Vykdymo lygmens {level!s} kelias yra {path!s}, kurio savo " "ruožtu nėra." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" msgstr "Paskirties tarnybos nėra" #: 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:27 msgid "Configure Plymouth theme" msgstr "Konfigūruoti Plymouth temą" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Įdiegti paketus." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Apdorojami paketai (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Įdiegiamas %(num)d paketas." msgstr[1] "Įdiegiami %(num)d paketai." msgstr[2] "Įdiegiama %(num)d paketų." msgstr[3] "Įdiegiama %(num)d paketų." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Šalinamas %(num)d paketas." msgstr[1] "Šalinami %(num)d paketai." msgstr[2] "Šalinama %(num)d paketų." msgstr[3] "Šalinama %(num)d paketų." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Paketų tvarkytuvės klaida" #: src/modules/packages/main.py:589 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:601 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:629 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:502 msgid "Bootloader installation error" msgstr "Operacinės sistemos paleidyklės diegimo klaida" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Kuriama initramfs naudojant mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Nepavyko paskirties vietoje paleisti mkinitfs" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Išėjimo kodas buvo {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigūruojama OpenRC dmcrypt tarnyba." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Rašoma fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfigūruojamos lokalės." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Įrašoma tinklo konfigūracija." calamares-3.2.41.1/lang/python/lv/000077500000000000000000000000001410275732300165575ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lv/LC_MESSAGES/000077500000000000000000000000001410275732300203445ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/lv/LC_MESSAGES/python.po000066400000000000000000000240721410275732300222320ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/mk/000077500000000000000000000000001410275732300165455ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/mk/LC_MESSAGES/000077500000000000000000000000001410275732300203325ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/mk/LC_MESSAGES/python.po000066400000000000000000000257531410275732300222270ustar00rootroot00000000000000# 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: # Martin Ristovski , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM конфигурациониот фајл не може да се создаде" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM конфигурациониот фајл {!s} не постои" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM конфигурациониот фајл не може да се создаде" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM конфигурациониот фајл {!s} не постои" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM конфигурациониот фајл не може да се создаде" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM конфигурациониот фајл {!s} не постои" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Не може да се подеси LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Нема инсталирано LightDM поздравувач" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM конфигурациониот фајл не може да се создаде" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM конфигурациониот фајл {!s} не постои" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Немате избрано дисплеј менаџер за displaymanager модулот." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ml/000077500000000000000000000000001410275732300165465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ml/LC_MESSAGES/000077500000000000000000000000001410275732300203335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ml/LC_MESSAGES/python.po000066400000000000000000000245041410275732300222210ustar00rootroot00000000000000# 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: # Abhijith Sheheer , 2019 # Balasankar C , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "ക്രമീകരണത്തിൽ പിഴവ്" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/mr/000077500000000000000000000000001410275732300165545ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/mr/LC_MESSAGES/000077500000000000000000000000001410275732300203415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/mr/LC_MESSAGES/python.po000066400000000000000000000237751410275732300222400ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/nb/000077500000000000000000000000001410275732300165355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/nb/LC_MESSAGES/000077500000000000000000000000001410275732300203225ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/nb/LC_MESSAGES/python.po000066400000000000000000000243631410275732300222130ustar00rootroot00000000000000# 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: # 865ac004d9acf2568b2e4b389e0007c7_fba755c <3516cc82d94f87187da1e036e5f09e42_616112>, 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installer pakker." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ne/000077500000000000000000000000001410275732300165405ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ne/LC_MESSAGES/000077500000000000000000000000001410275732300203255ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ne/LC_MESSAGES/python.po000066400000000000000000000237741410275732300222230ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Nepali (https://www.transifex.com/calamares/teams/20061/ne/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ne\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ne_NP/000077500000000000000000000000001410275732300171355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ne_NP/LC_MESSAGES/000077500000000000000000000000001410275732300207225ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ne_NP/LC_MESSAGES/python.po000066400000000000000000000240121410275732300226020ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ne_NP\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/nl/000077500000000000000000000000001410275732300165475ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/nl/LC_MESSAGES/000077500000000000000000000000001410275732300203345ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/nl/LC_MESSAGES/python.po000066400000000000000000000327051410275732300222240ustar00rootroot00000000000000# 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: # Tristan , 2020 # Adriaan de Groot , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB instellen." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Partities mounten." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Configuratiefout" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Geen partities gedefinieerd voor
{!s}
om te gebruiken." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configureer systemd services " #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" msgstr "De service kan niet worden gewijzigd" #: 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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "" "De systemd service {name!s} kon niet worden ingeschakeld." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "De systemd service {name!s} kon niet worden uitgeschakeld." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "De systemd unit {name!s} kon niet worden gemaskerd." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Unmount bestandssystemen." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Bestandssystemen opvullen." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync mislukte met foutcode {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Bestandssysteem uitpakken {}/{}, bestand {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Beginnen met uitpakken van {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Uitpakken van bestandssysteem \"{}\" mislukt" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Geen mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Onjuist mount-punt voor de root-partitie" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Foutieve unsquash configuratie" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Het bronbestandssysteem \"{}\" bestaat niet" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs niet gevonden, verifieer dat je het squashfs-tools pakket heb " "geïnstalleerd" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "De bestemming \"{}\" in het doelsysteem is niet een map" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Schrijven naar het KDM-configuratiebestand is mislukt " #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM-configuratiebestand {!s} bestaat niet." #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Schrijven naar het LXDM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Het KDM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Schrijven naar het LightDM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Het LightDM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Kon LightDM niet configureren" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Geen LightDM begroeter geïnstalleerd" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Schrijven naar het SLIM-configuratiebestand is mislukt" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Het SLIM-configuratiebestand {!s} bestaat niet" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Geen display managers geselecteerd voor de displaymanager module." #: src/modules/displaymanager/main.py:907 msgid "" "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:989 msgid "Display manager configuration was incomplete" msgstr "Display manager configuratie was incompleet" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Instellen van mkinitcpio" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Instellen van versleutelde swap." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Data aan het installeren." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configureer OpenRC services" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kon service {name!s} niet toegoeven aan runlevel {level!s}." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kon service {name!s} niet verwijderen van runlevel {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 "" "Onbekende serviceactie {arg!s} voor service {name!s} in " "runlevel {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} aanroeping in chroot resulteerde in foutcode " "{num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" msgstr "Doel runlevel bestaat niet" #: 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:110 msgid "Target service does not exist" msgstr "Doelservice bestaat niet" #: 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:27 msgid "Configure Plymouth theme" msgstr "Plymouth thema instellen" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Pakketten installeren." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Pakketten verwerken (%(count)d/ %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Pakket installeren." msgstr[1] "%(num)d pakketten installeren." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Pakket verwijderen." msgstr[1] "%(num)d pakketten verwijderen." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Instellen van hardwareklok" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Een initramfs wordt aangemaakt met mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "De afsluitcode was {}" #: 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 "Instellen van initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configureren van OpenRC dmcrypt service." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "fstab schrijven." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Voorbeeld Python-taak" #: 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:30 msgid "Configuring locales." msgstr "Taal en locatie instellen." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Netwerk-configuratie opslaan." calamares-3.2.41.1/lang/python/pl/000077500000000000000000000000001410275732300165515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pl/LC_MESSAGES/000077500000000000000000000000001410275732300203365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pl/LC_MESSAGES/python.po000066400000000000000000000336151410275732300222270ustar00rootroot00000000000000# 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: # 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Konfiguracja GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montowanie partycji." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Błąd konfiguracji" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Nie ma zdefiniowanych partycji dla
{!s}
do użytku." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Konfiguracja usług systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Nie można włączyć usługi systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Nie można wyłączyć celu w systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Nie można zamaskować jednostki systemd {name!s}." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Odmontuj systemy plików." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Zapełnianie systemu plików." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync zakończyło działanie kodem błędu {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Odpakowywanie obrazu {}/{}, pliku {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Rozpoczynanie odpakowywania {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Błąd rozpakowywania obrazu \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Brak punktu montowania partycji root" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage nie zawiera klucza \"rootMountPoint\", nic nie zostanie " "zrobione" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Błędny punkt montowania partycji root" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "Punkt montowania partycji root (rootMountPoint) jest \"{}\", które nie " "istnieje; nic nie zostanie zrobione" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Błędna konfiguracja unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Źródłowy system plików \"{}\" nie istnieje" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Nie można odnaleźć unsquashfs, upewnij się, że masz zainstalowany pakiet " "squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Nie można zapisać pliku konfiguracji KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Plik konfiguracyjny KDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Plik konfiguracji LXDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Nie można zapisać pliku konfiguracji LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Plik konfiguracji LightDM {!s} nie istnieje" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Nie można skonfigurować LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nie zainstalowano ekranu powitalnego LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Nie można zapisać pliku konfiguracji SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Plik konfiguracji SLIM {!s} nie istnieje" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Lista displaymanagers jest pusta lub niezdefiniowana w globalstorage oraz " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Konfiguracja menedżera wyświetlania była niekompletna" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurowanie mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfigurowanie zaszyfrowanej przestrzeni wymiany." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalowanie danych." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfiguracja usług OpenRC" #: 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: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: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: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:101 msgid "Target runlevel does not exist" msgstr "Docelowy poziom odtwarzania nie istnieje" #: 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:110 msgid "Target service does not exist" msgstr "Docelowa usługa nie istnieje" #: src/modules/services-openrc/main.py:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "Ścieżka do usługi {name!s} to {path!s}, nie istnieje." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Konfiguracja motywu Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Zainstaluj pakiety." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Przetwarzanie pakietów (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Instalowanie jednego pakietu." 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Usuwanie jednego pakietu." msgstr[1] "Usuwanie %(num)d pakietów." msgstr[2] "Usuwanie %(num)d pakietów." msgstr[3] "Usuwanie %(num)d pakietów." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/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:49 msgid "Failed to run dracut on the target" msgstr "Nie udało się włączyć dracut." #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "Konfigurowanie initramfs." #: src/modules/openrcdmcryptcfg/main.py:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurowanie usługi OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisywanie fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfigurowanie ustawień lokalnych." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Zapisywanie konfiguracji sieci." calamares-3.2.41.1/lang/python/pt_BR/000077500000000000000000000000001410275732300171445ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pt_BR/LC_MESSAGES/000077500000000000000000000000001410275732300207315ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pt_BR/LC_MESSAGES/python.po000066400000000000000000000333411410275732300226160ustar00rootroot00000000000000# 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: # André Marcelo Alvarenga , 2020 # Guilherme Marçal Silva, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Guilherme Marçal Silva, 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Montando partições." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Erro de Configuração." #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Sem partições definidas para uso por
{!s}
." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços do systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 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: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:69 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:71 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:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comandos desconhecidos do systemd {command!s} e " "{suffix!s} para a unidade {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmontar os sistemas de arquivos." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Preenchendo sistemas de arquivos." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "O rsync falhou com o código de erro {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Descompactando imagem {}/{}, arquivo {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Começando a descompactar {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Ocorreu uma falha ao descompactar a imagem \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Ponto de montagem incorreto para a partição root" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Configuração incorreta do unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de arquivos de origem \"{}\" não existe" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Ocorreu uma falha ao localizar o unsquashfs, certifique-se de que o pacote " "squashfs-tools esteja instalado" #: src/modules/unpackfs/main.py:479 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:526 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:527 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:588 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:589 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:672 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:673 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:747 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Não há nenhuma tela de login do LightDM instalada." #: src/modules/displaymanager/main.py:779 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:780 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:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "A lista de displaymanagers está vazia ou indefinida em ambos globalstorage e" " displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "A configuração do gerenciador de exibição está incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Configurando mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Configurando swap encriptada." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Instalando os dados." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurar serviços do OpenRC" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." 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: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: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: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." #: 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: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." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Processando pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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 bootloader." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 relógio de hardware." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Criando initramfs com mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Falha ao executar mkinitfs no alvo" #: 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/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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Configurando serviço dmcrypt do OpenRC." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Escrevendo fstab." #: src/modules/fstab/main.py:389 msgid "No
{!s}
configuration is given for
{!s}
to use." msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." msgstr "Tarefa modelo python." #: 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:30 msgid "Configuring locales." msgstr "Configurando locais." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Salvando configuração de rede." calamares-3.2.41.1/lang/python/pt_PT/000077500000000000000000000000001410275732300171645ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pt_PT/LC_MESSAGES/000077500000000000000000000000001410275732300207515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/pt_PT/LC_MESSAGES/python.po000066400000000000000000000344441410275732300226430ustar00rootroot00000000000000# 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: # Nuno Amorim , 2018 # Ricardo Simões , 2020 # Hugo Carvalho , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Hugo Carvalho , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Configurar o GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "A montar partições." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Erro de configuração" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Nenhuma partição está definida para
{!s}
usar." #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" msgstr "Configurar serviços systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 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: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:69 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:71 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:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Comandos do systemd desconhecidos {command!s} e " "{suffix!s} por unidade {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Desmontar sistemas de ficheiros." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "A preencher os sistemas de ficheiros." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync falhou com código de erro {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "A descompactar imagem {}/{}, ficheiro {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "A começar a descompactação {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Falha ao descompactar imagem \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Nenhum ponto de montagem para a partição root" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Ponto de montagem mau para partição root" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint é \"{}\", que não existe, nada a fazer" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Má configuração unsquash" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "O sistema de ficheiros fonte \"{}\" não existe" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Falha ao procurar unsquashfs, certifique-se que tem o pacote squashfs-tools " "instalado" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração KDM" #: src/modules/displaymanager/main.py:527 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:588 msgid "Cannot write LXDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LXDM" #: src/modules/displaymanager/main.py:589 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:672 msgid "Cannot write LightDM configuration file" msgstr "Não é possível gravar o ficheiro de configuração LightDM" #: src/modules/displaymanager/main.py:673 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:747 msgid "Cannot configure LightDM" msgstr "Não é possível configurar o LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nenhum ecrã de boas-vindas LightDM instalado." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Não é possível gravar o ficheiro de configuração SLIM" #: src/modules/displaymanager/main.py:780 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:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "A lista de gestores de visualização está vazia ou indefinida tanto no " "globalstorage como no displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "A configuração do gestor de exibição estava incompleta" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "A configurar o mkintcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Configurando a swap criptografada." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "A instalar dados." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Configurar serviços OpenRC" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." 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: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: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: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}, que " "não existe." #: 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: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:27 msgid "Configure Plymouth theme" msgstr "Configurar tema do Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalar pacotes." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "A processar pacotes (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Erro do gestor de pacotes" #: src/modules/packages/main.py:589 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:601 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:629 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 o carregador de arranque." #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Erro de instalação do carregador de arranque" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "A criar o initramfs com o mkinitfs." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Falha ao executar o mkintfs no destino" #: 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/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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "A configurar o serviço OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "A escrever o fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "A configurar a localização." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "A guardar a configuração de rede." calamares-3.2.41.1/lang/python/ro/000077500000000000000000000000001410275732300165565ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ro/LC_MESSAGES/000077500000000000000000000000001410275732300203435ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ro/LC_MESSAGES/python.po000066400000000000000000000250531410275732300222310ustar00rootroot00000000000000# 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: # Jobava Jobava , 2018 # Sebastian Brici , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Sebastian Brici , 2018\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Demonteaza sistemul de fisiere" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalează pachetele." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Se procesează pachetele (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Se elimină un pachet." msgstr[1] "Se elimină %(num)d pachet." msgstr[2] "Se elimină %(num)d de pachete." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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: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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/ru/000077500000000000000000000000001410275732300165645ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ru/LC_MESSAGES/000077500000000000000000000000001410275732300203515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ru/LC_MESSAGES/python.po000066400000000000000000000274261410275732300222450ustar00rootroot00000000000000# 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: # Aleksey Kabanov , 2018 # ZIzA, 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Настройте GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Монтирование разделов." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Ошибка конфигурации" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Не определены разделы для использования
{!S}
." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Размонтирование файловой системы." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Наполнение файловой системы." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Настройка зашифрованного swap." #: 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 "" #: 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 "Настроить тему Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Установить пакеты." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обработка пакетов (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Установка одного пакета." msgstr[1] "Установка %(num)d пакетов." msgstr[2] "Установка %(num)d пакетов." msgstr[3] "Установка %(num)d пакетов." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Удаление одного пакета." msgstr[1] "Удаление %(num)d пакетов." msgstr[2] "Удаление %(num)d пакетов." msgstr[3] "Удаление %(num)d пакетов." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Создание 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:389 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:30 msgid "Configuring locales." msgstr "Настройка языка." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Сохранение настроек сети." calamares-3.2.41.1/lang/python/ru_RU/000077500000000000000000000000001410275732300171725ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ru_RU/LC_MESSAGES/000077500000000000000000000000001410275732300207575ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ru_RU/LC_MESSAGES/python.po000066400000000000000000000243121410275732300226420ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Language-Team: Russian (Russia) (https://www.transifex.com/calamares/teams/20061/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru_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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/si/000077500000000000000000000000001410275732300165515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/si/LC_MESSAGES/000077500000000000000000000000001410275732300203365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/si/LC_MESSAGES/python.po000066400000000000000000000237751410275732300222350ustar00rootroot00000000000000# 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: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\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 "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/sk/000077500000000000000000000000001410275732300165535ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sk/LC_MESSAGES/000077500000000000000000000000001410275732300203405ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sk/LC_MESSAGES/python.po000066400000000000000000000317651410275732300222350ustar00rootroot00000000000000# 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: # Dušan Kazik , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Konfigurácia zavádzača GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Pripájanie oddielov." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Chyba konfigurácie" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Konfigurácia služieb systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Nedá sa povoliť služba systému systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Nedá sa zakázať cieľ systému systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Nedá sa zamaskovať jednotka systému systemd {name!s}." #: src/modules/services-systemd/main.py:73 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:31 msgid "Unmount file systems." msgstr "Odpojenie súborových systémov." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Napĺňanie súborových systémov." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Príkaz rsync zlyhal s chybovým kódom {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Rozbaľuje sa obraz {}/{}, súbor {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Spúšťa sa rozbaľovanie {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Zlyhalo rozbalenie obrazu „{}“" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Žiadny bod pripojenia pre koreňový oddiel" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Zlý bod pripojenia pre koreňový oddiel" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Nesprávna konfigurácia nástroja unsquash" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Súborový systém pre \"{}\" ({}) nie je podporovaný vaším aktuálnym jadrom" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Zdrojový súborový systém \"{}\" neexistuje" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Cieľ \"{}\" v cieľovom systéme nie je adresárom" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu KDM {!s} neexistuje" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu LXDM {!s} neexistuje" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu LightDM {!s} neexistuje" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Nedá s nakonfigurovať správca LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Nie je nainštalovaný žiadny vítací nástroj LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Nedá sa zapísať konfiguračný súbor správcu SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Konfiguračný súbor správcu SLIM {!s} neexistuje" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Neboli vybraní žiadni správcovia zobrazenia pre modul displaymanager." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Konfigurácia správcu zobrazenia nebola úplná" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurácia mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfigurácia zašifrovaného odkladacieho priestoru." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Inštalácia údajov." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurácia služieb 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 "" #: 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 "Cieľová služba neexistuje" #: 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:27 msgid "Configure Plymouth theme" msgstr "Konfigurácia motívu služby Plymouth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Inštalácia balíkov." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Spracovávajú sa balíky (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Inštaluje sa jeden balík." 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:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Odstraňuje sa jeden balík." 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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/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 "Kód skončenia bol {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "" #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Zapisovanie fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfigurácia miestnych nastavení." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Ukladanie sieťovej konfigurácie." calamares-3.2.41.1/lang/python/sl/000077500000000000000000000000001410275732300165545ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sl/LC_MESSAGES/000077500000000000000000000000001410275732300203415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sl/LC_MESSAGES/python.po000066400000000000000000000241471410275732300222320ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/sq/000077500000000000000000000000001410275732300165615ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sq/LC_MESSAGES/000077500000000000000000000000001410275732300203465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sq/LC_MESSAGES/python.po000066400000000000000000000340731410275732300222360ustar00rootroot00000000000000# 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: # Besnik Bleta , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Besnik Bleta , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Formësoni GRUB-in." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Po montohen pjesë." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Gabim Formësimi" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Formësoni shërbime systemd" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "S’aktivizohet dot shërbimi systemd {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "S’çaktivizohet dot objektivi systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "S’maskohet dot njësia systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Urdhra të panjohur systemd {command!s} dhe " "{suffix!s} për njësi {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Çmontoni sisteme kartelash." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Po mbushen sisteme kartelash." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync dështoi me kod gabimi {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Po shpaketohet paketa {}/{}, kartela {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Po fillohet të shpaketohet {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Dështoi shpaketimi i figurës \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "S’ka pikë montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:432 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:437 msgid "Bad mount point for root partition" msgstr "Pikë e gabuar montimi për ndarjen rrënjë" #: src/modules/unpackfs/main.py:438 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:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Formësim i keq i unsquash-it" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Sistemi i kartelave \"{}\" ({}) s’ekziston" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "S’u arrit të gjendej unsquashfs, sigurohuni se e keni të instaluar paketën " "squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "S’shkruhet dot kartelë formësimi KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi KDM {!s}" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LXDM {!s}" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "S’shkruhet dot kartelë formësimi LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi LightDM {!s}" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "S’formësohet dot LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "S’ka të instaluar përshëndetës LightDM." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "S’shkruhet dot kartelë formësimi SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "S’ekziston kartelë formësimi SLIM {!s}" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "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:989 msgid "Display manager configuration was incomplete" msgstr "Formësimi i përgjegjësit të ekranit s’qe i plotë" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Po formësohet mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Po formësohet pjesë swap e fshehtëzuar." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Po instalohen të dhëna." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Formësoni shërbime OpenRC" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Service-action {arg!s} i panjohur për shërbimin {name!s} te " "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 "" "Thirrje rc-update {arg!s} në chroot u përgjigj me kod gabimi " "{num!s}." #: 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:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" "Shtegu për runlevel {level!s} është {path!s}, i cili nuk " "ekziston." #: 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:111 msgid "" "The path for service {name!s} is {path!s}, which does not " "exist." msgstr "" "Shtegu për shërbimin {name!s} është {path!s}, i cili nuk " "ekziston." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Formësoni temën Plimuth" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Instalo paketa." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Po përpunohen paketat (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Gabim Përgjegjësi Paketash" #: src/modules/packages/main.py:589 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:601 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:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Gabim instalimi Ngarkuesi Nisësi" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Po krijohet initramfs me mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Kodi i daljes qe {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Po formësohet shërbim OpenRC dmcrypt." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Po shkruhet fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Po formësohen vendoret." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Po ruhet formësimi i rrjetit." calamares-3.2.41.1/lang/python/sr/000077500000000000000000000000001410275732300165625ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sr/LC_MESSAGES/000077500000000000000000000000001410275732300203475ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sr/LC_MESSAGES/python.po000066400000000000000000000255611410275732300222410ustar00rootroot00000000000000# 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: # Slobodan Simić , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Подеси ГРУБ" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Монтирање партиција." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Грешка поставе" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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 "" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Демонтирање фајл-система." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Попуњавање фајл-система." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync неуспешан са кодом грешке {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Неуспело распакивање одраза \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Нема тачке мотирања за root партицију" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Лоша тачка монтирања за корену партицију" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Уписивање fstab." #: src/modules/fstab/main.py:389 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:30 msgid "Configuring locales." msgstr "Подешавање локалитета." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Упис поставе мреже." calamares-3.2.41.1/lang/python/sr@latin/000077500000000000000000000000001410275732300177125ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sr@latin/LC_MESSAGES/000077500000000000000000000000001410275732300214775ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sr@latin/LC_MESSAGES/python.po000066400000000000000000000241651410275732300233700ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/sv/000077500000000000000000000000001410275732300165665ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sv/LC_MESSAGES/000077500000000000000000000000001410275732300203535ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/sv/LC_MESSAGES/python.po000066400000000000000000000335421410275732300222430ustar00rootroot00000000000000# 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: # Jan-Olof Svensson, 2019 # Tobias Olausson , 2020 # Luna Jernberg , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Luna Jernberg , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Konfigurera GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Monterar partitioner." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Konfigurationsfel" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Konfigurera systemd tjänster" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Kunde inte aktivera systemd tjänst {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Kunde inte inaktivera systemd målsystem {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Kan inte maskera systemd unit {name!s}" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Okända systemd kommandon {command!s} och {suffix!s} för " "enhet {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Avmontera filsystem." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Packar upp filsystem." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync misslyckades med felkod {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Packar upp avbild {}/{}, fil {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Börjar att packa upp {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Misslyckades att packa upp avbild \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Ingen monteringspunkt för root partition" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage innehåller ingen \"rootMountPoint\"-nyckel, så gör inget" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Dålig monteringspunkt för root partition" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint är \"{}\", vilket inte finns, så gör inget" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Dålig unsquash konfiguration" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Källfilsystemet \"{}\" existerar inte" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Kunde inte hitta unsquashfs, se till att du har paketet squashfs-tools " "installerat" #: src/modules/unpackfs/main.py:479 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:526 msgid "Cannot write KDM configuration file" msgstr "Misslyckades med att skriva KDM konfigurationsfil" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Misslyckades med att skriva LXDM konfigurationsfil" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Misslyckades med att skriva LightDM konfigurationsfil" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Kunde inte konfigurera LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Ingen LightDM greeter installerad." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Misslyckades med att SLIM konfigurationsfil" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM konfigurationsfil {!s} existerar inte" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Ingen skärmhanterare vald för displaymanager modulen." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Skärmhanterar listan är tom eller odefinierad i både globalstorage och " "displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Konfiguration för displayhanteraren var inkomplett" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Konfigurerar mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Konfigurerar krypterad swap." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Installerar data." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Konfigurera OpenRC tjänster" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Kan inte lägga till tjänsten {name!s} till körnivå {level!s}." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Kan inte ta bort tjänsten {name!s} från körnivå {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 "" "Okänt tjänst-anrop {arg!s}för tjänsten {name!s} i körnivå " "{level!s}." #: 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:101 msgid "Target runlevel does not exist" msgstr "Begärd körnivå existerar inte" #: 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:110 msgid "Target service does not exist" msgstr "Begärd tjänst existerar inte" #: 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:27 msgid "Configure Plymouth theme" msgstr "Konfigurera Plymouth tema" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Installera paket." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Bearbetar paket (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Pakethanterare fel" #: src/modules/packages/main.py:589 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:601 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:629 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/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "Starthanterare installationsfel" #: src/modules/bootloader/main.py:503 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/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Skapar initramfs med mkinitfs." #: 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/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Felkoden var {}" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "Konfigurerar OpenRC dmcrypt tjänst." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Skriver fstab." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Konfigurerar språkinställningar" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Sparar nätverkskonfiguration." calamares-3.2.41.1/lang/python/te/000077500000000000000000000000001410275732300165465ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/te/LC_MESSAGES/000077500000000000000000000000001410275732300203335ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/te/LC_MESSAGES/python.po000066400000000000000000000237741410275732300222310ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/tg/000077500000000000000000000000001410275732300165505ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/tg/LC_MESSAGES/000077500000000000000000000000001410275732300203355ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/tg/LC_MESSAGES/python.po000066400000000000000000000363271410275732300222310ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "Васлкунии қисмҳои диск." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Хатои танзимкунӣ" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Ягон қисми диск барои истифодаи
{!s}
муайян карда нашуд." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Интихоби systemd-и {name!s} ғайрифаъол карда намешавад." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Воҳиди systemd-и {name!s} пинҳон карда намешавад." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Фармонҳои systemd-и номаълум {command!s} ва " "{suffix!s} барои воҳиди {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Ҷудо кардани низомҳои файлӣ." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Пурборкунӣ бо низомҳои файлӣ." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync бо рамзи хатои {} қатъ шуд." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Баровардани тимсол: {}/{}, файл: {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Оғози барориши {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Тимсоли \"{}\" бароварда нашуд" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Ягон нуқтаи васл барои қисми диски реша (root) нест" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "globalstorage калиди \"rootMountPoint\"-ро дар бар намегирад, ҳeҷ кop " "намeкyнад" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Нуқтаи васли нодуруст барои қисми диски реша (root)" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint аз \"{}\" иборат аст, ки вуҷуд надорад, ҳeҷ кop намeкyнад" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Танзимоти unsquash нодуруст аст" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "Низоми файлӣ барои \"{}\" ({}) бо ҳастаи ҷории шумо дастгирӣ намешавад" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Низоми файлии манбаи \"{}\" вуҷуд надорад" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "unsquashfs ёфт нашуд, мутмаин шавед, ки бастаи squashfs-tools насб карда " "шудааст" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Ҷойи таъиноти \"{}\" дар низоми интихобшуда феҳрист намебошад" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Файли танзимии KDM сабт карда намешавад" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Файли танзимии KDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Файли танзимии LXDM сабт карда намешавад" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Файли танзимии LXDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Файли танзимии LightDM сабт карда намешавад" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Файли танзимии LightDM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM танзим карда намешавад" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Хушомади LightDM насб нашудааст." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Файли танзимии SLIM сабт карда намешавад" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Файли танзимии SLIM {!s} вуҷуд надорад" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Ягон мудири намоиш барои модули displaymanager интихоб нашудааст." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Рӯйхати displaymanagers ҳам дар globalstorage ва ҳам дар displaymanager.conf" " холӣ ё номаълум аст." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Раванди танзимкунии мудири намоиш ба анҷом нарасид" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Танзимкунии mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "Нуқтаи васли реша (root) барои истифодаи
{!s}
дода нашуд." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Танзимкунии мубодилаи рамзгузоришуда." #: 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Насбкунии қуттиҳо." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Коргузории қуттиҳо (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Насбкунии як баста." msgstr[1] "Насбкунии %(num)d баста." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Тозакунии як баста" msgstr[1] "Тозакунии %(num)d баста." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "Танзимкунии маҳаллигардониҳо." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Нигоҳдории танзимоти шабака." calamares-3.2.41.1/lang/python/th/000077500000000000000000000000001410275732300165515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/th/LC_MESSAGES/000077500000000000000000000000001410275732300203365ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/th/LC_MESSAGES/python.po000066400000000000000000000237311410275732300222250ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/tr_TR/000077500000000000000000000000001410275732300171705ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/tr_TR/LC_MESSAGES/000077500000000000000000000000001410275732300207555ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/tr_TR/LC_MESSAGES/python.po000066400000000000000000000330001410275732300226320ustar00rootroot00000000000000# 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: # abc Def , 2020 # Demiray Muhterem , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Demiray Muhterem , 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "GRUB'u yapılandır." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Disk bölümlemeleri bağlanıyor." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Yapılandırma Hatası" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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:26 msgid "Configure systemd services" msgstr "Systemd hizmetlerini yapılandır" #: 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: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:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." msgstr "Systemd hizmeti etkinleştirilemiyor {name!s}." #: 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Systemd hedefi devre dışı bırakılamıyor {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Systemd birimi maskeleyemiyor {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Bilinmeyen sistem komutları {command!s} ve " "{suffix!s} {name!s} birimi için." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Dosya sistemlerini ayırın." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Dosya sistemlerini dolduruyorum." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync {} hata koduyla başarısız oldu." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Açılan kurulum medyası {}/{}, dışa aktarılan dosya sayısı {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Dışa aktarım başlatılıyor {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "\"{}\" kurulum medyası aktarılamadı" #: src/modules/unpackfs/main.py:431 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:432 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:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint \"{}\", mevcut değil, hiçbirşey yapılmadı" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Unsquash yapılandırma sorunlu" #: src/modules/unpackfs/main.py:455 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:459 msgid "The source filesystem \"{}\" does not exist" msgstr "\"{}\" Kaynak dosya sistemi mevcut değil" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Unsquashfs bulunamadı, squashfs-tools paketinin kurulu olduğundan emin olun." #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Hedef sistemdeki \"{}\" hedefi bir dizin değil" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "KDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "LXDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "LightDM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "LightDM yapılandırılamıyor" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "LightDM karşılama yüklü değil." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "SLIM yapılandırma dosyası yazılamıyor" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM yapılandırma dosyası {!s} mevcut değil" #: src/modules/displaymanager/main.py:906 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:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Displaymanagers listesi hem globalstorage hem de displaymanager.conf'ta boş " "veya tanımsız." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Ekran yöneticisi yapılandırma işi tamamlanamadı" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Mkinitcpio yapılandırılıyor." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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:26 msgid "Configuring encrypted swap." msgstr "Şifreli takas alanı yapılandırılıyor." #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Veri yükleniyor." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr " OpenRC servislerini yapılandır" #: 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: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:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" "Çalışma düzeyinde {level!s} hizmetinde {name!s} servisi için bilinmeyen " "hizmet eylemi {arg!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} çağrısında chroot {num!s} hata kodunu " "döndürdü." #: 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: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:110 msgid "Target service does not exist" msgstr "Hedef hizmet mevcut değil" #: 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 {path!s}, ki mevcut değil." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" msgstr "Plymouth temasını yapılandır" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Paketleri yükle" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Paketler işleniyor (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, 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:65 #, 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/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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 "Önyükleyici kuruluyor" #: src/modules/bootloader/main.py:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Donanım saati ayarlanıyor." #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." msgstr "Mkinitfs ile initramfs oluşturuluyor." #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" msgstr "Hedefte mkinitfs çalıştırılamadı" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" msgstr "Çıkış kodu {} idi" #: 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:26 msgid "Configuring OpenRC dmcrypt service." msgstr "OpenRC dmcrypt hizmeti yapılandırılıyor." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Fstab dosyasına yazılıyor." #: src/modules/fstab/main.py:389 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: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:30 msgid "Configuring locales." msgstr "Sistem yerelleri yapılandırılıyor." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Ağ yapılandırması kaydediliyor." calamares-3.2.41.1/lang/python/uk/000077500000000000000000000000001410275732300165555ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/uk/LC_MESSAGES/000077500000000000000000000000001410275732300203425ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/uk/LC_MESSAGES/python.po000066400000000000000000000422361410275732300222320ustar00rootroot00000000000000# 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: # Володимир Братко , 2018 # Paul S <204@tuta.io>, 2019 # Yuri Chornoivan , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: Yuri Chornoivan , 2021\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" "Content-Transfer-Encoding: 8bit\n" "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:28 msgid "Configure GRUB." msgstr "Налаштовування GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Монтування розділів." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Помилка налаштовування" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "Не визначено розділів для використання
{!s}
." #: 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "Не вдалося вимкнути завдання systemd {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "Не вдалося замаскувати вузол systemd {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "Невідомі команди systemd {command!s} та {suffix!s}" " для пристрою {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "Демонтувати файлові системи." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Заповнення файлових систем." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "Спроба виконати rsync зазнала невдачі з кодом помилки {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Розпаковуємо образ {} з {}, файл {} з {}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Починаємо розпаковувати {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Не вдалося розпакувати образ «{}»" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "Немає точки монтування для кореневого розділу" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" "У globalstorage не міститься ключа «rootMountPoint». Не виконуватимемо " "ніяких дій." #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "Помилкова точна монтування для кореневого розділу" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" "Для rootMountPoint вказано значення «{}». Такого шляху не існує. Не " "виконуватимемо ніяких дій." #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Помилкові налаштування unsquash" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" "У поточному ядрі системи не передбачено підтримки файлової системи «{}» ({})" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "Вихідної файлової системи «{}» не існує" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" "Не вдалося знайти unsquashfs; переконайтеся, що встановлено пакет squashfs-" "tools" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "Призначення «{}» у цільовій системі не є каталогом" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "Не вдалося записати файл налаштувань KDM" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "Файла налаштувань KDM {!s} не існує" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань LXDM" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "Файла налаштувань LXDM {!s} не існує" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань LightDM" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "Файла налаштувань LightDM {!s} не існує" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "Не вдалося налаштувати LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "Засіб входу до системи LightDM не встановлено." #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "Не вдалося виконати запис до файла налаштувань SLIM" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "Файла налаштувань SLIM {!s} не існує" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "Не вибрано засобу керування дисплеєм для модуля displaymanager." #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" "Список засобів керування дисплеєм є порожнім або невизначеним у " "bothglobalstorage та displaymanager.conf." #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "Налаштування засобу керування дисплеєм є неповними" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "Налаштовуємо mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" "Не вказано кореневої точки монтування для використання у
{!s}
." #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Налаштовуємо зашифрований розділ резервної пам'яті." #: 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} до рівня запуску {level!s}." #: 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: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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Встановити пакети." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Обробляємо пакунки (%(count)d з %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Встановлюємо %(num)d пакунок." msgstr[1] "Встановлюємо %(num)d пакунки." msgstr[2] "Встановлюємо %(num)d пакунків." msgstr[3] "Встановлюємо один пакунок." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Вилучаємо %(num)d пакунок." msgstr[1] "Вилучаємо %(num)d пакунки." msgstr[2] "Вилучаємо %(num)d пакунків." msgstr[3] "Вилучаємо один пакунок." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "Помилка засобу керування пакунками" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" "Засобу керування пакунками не вдалося приготувати оновлення. Програмою " "
{!s}
повернуто код помилки {!s}." #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" "Засобу керування пакунками не вдалося оновити систему. Програмою " "
{!s}
повернуто код помилки {!s}." #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "Помилка встановлення завантажувача" #: src/modules/bootloader/main.py:503 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 "Створення 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 "Налаштовуємо службу dmcrypt OpenRC." #: src/modules/fstab/main.py:29 msgid "Writing fstab." msgstr "Записуємо fstab." #: src/modules/fstab/main.py:389 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:30 msgid "Configuring locales." msgstr "Налаштовуємо локалі." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Зберігаємо налаштування мережі." calamares-3.2.41.1/lang/python/ur/000077500000000000000000000000001410275732300165645ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ur/LC_MESSAGES/000077500000000000000000000000001410275732300203515ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/ur/LC_MESSAGES/python.po000066400000000000000000000237721410275732300222450ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" msgstr[1] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/uz/000077500000000000000000000000001410275732300165745ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/uz/LC_MESSAGES/000077500000000000000000000000001410275732300203615ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/uz/LC_MESSAGES/python.po000066400000000000000000000237321410275732300222510ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:28 msgid "Configure GRUB." msgstr "" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/vi/000077500000000000000000000000001410275732300165545ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/vi/LC_MESSAGES/000077500000000000000000000000001410275732300203415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/vi/LC_MESSAGES/python.po000066400000000000000000000334351410275732300222320ustar00rootroot00000000000000# 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 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: T. Tran , 2020\n" "Language-Team: Vietnamese (https://www.transifex.com/calamares/teams/20061/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "Cấu hình GRUB" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "Đang gắn kết các phân vùng." #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "Lỗi cấu hình" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 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/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:67 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:69 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:71 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:73 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/umount/main.py:31 msgid "Unmount file systems." msgstr "Gỡ kết nối các hệ thống tập tin." #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "Đang làm đầy các hệ thống tập tin." #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync thất bại với lỗi {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "Đang bung hình ảnh {}/{}, tập tin {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "Bắt đầu bung nội dung {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "Bung hình ảnh thất bại \"{}\"" #: src/modules/unpackfs/main.py:431 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:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage không có khoá \"rootMountPoint\", sẽ không làm gì cả" #: src/modules/unpackfs/main.py:437 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:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint không tồn tại, có giá trị là \"{}\", sẽ không làm gì cả" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "Sai cấu hình bung nén" #: src/modules/unpackfs/main.py:455 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:459 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:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "Không tìm thấy lệnh unsquashfs, vui lòng cài đặt gói squashfs-tools" #: src/modules/unpackfs/main.py:479 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:526 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:527 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:588 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:589 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:672 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:673 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:747 msgid "Cannot configure LightDM" msgstr "Không thể cấu hình LXDM" #: src/modules/displaymanager/main.py:748 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:779 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:780 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:906 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:907 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:989 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:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 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/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "Đang cấu hình hoán đổi mã hoá" #: src/modules/rawfs/main.py:26 msgid "Installing data." msgstr "Đang cài đặt dữ liệu." #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" msgstr "Cấu hình dịch vụ OpenRC" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." msgstr "Không thể thêm dịch vụ {name!s} vào run-level {level!s}." #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." msgstr "Không thể loại bỏ dịch vụ {name!s} từ run-level {level!s}." #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "Đang cài đặt các gói ứng dụng." #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "Đang xử lý gói (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "Đang cài đặt %(num)d gói ứng dụng." #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "Đang gỡ bỏ %(num)d gói ứng dụng." #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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 "Đ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:389 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:30 msgid "Configuring locales." msgstr "Đang cấu hình ngôn ngữ." #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "Đang lưu cấu hình mạng." calamares-3.2.41.1/lang/python/zh/000077500000000000000000000000001410275732300165575ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh/LC_MESSAGES/000077500000000000000000000000001410275732300203445ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh/LC_MESSAGES/python.po000066400000000000000000000237341410275732300222360ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/zh_CN/000077500000000000000000000000001410275732300171375ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_CN/LC_MESSAGES/000077500000000000000000000000001410275732300207245ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_CN/LC_MESSAGES/python.po000066400000000000000000000323641410275732300226150ustar00rootroot00000000000000# 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: # Mingcong Bai , 2017 # plantman , 2017 # Feng Chao , 2020 # Bobby Rong , 2020 # 玉堂白鹤 , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 玉堂白鹤 , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "配置 GRUB." #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "挂载分区。" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "配置错误" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "没有分配分区给
{!s}
。" #: 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 "chroot 中的 systemctl {arg!s} 命令返回错误 {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "无法禁用 systemd 目标 {name!s}." #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "无法屏蔽 systemd 单元 {name!s}." #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 命令 {command!s} 和 {name!s} 单元前缀 " "{suffix!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "卸载文件系统。" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "写入文件系统。" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync 报错,错误码 {}." #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "解压镜像 {}/{},文件{}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "开始解压 {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "解压镜像失败 \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "无 root 分区挂载点" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage 未包含 \"rootMountPoint\",跳过" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "错误的 root 分区挂载点" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint 是 \"{}\",不存在此位置,跳过" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "错误的 unsquash 配置" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "你当前的内核不支持文件系统 \"{}\" ({})" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "源文件系统 \"{}\" 不存在" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "未找到 unsquashfs,请确保安装了 squashfs-tools 软件包" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目标系统中的 \"{}\" 不是一个目录" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "无法写入 KDM 配置文件" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM 配置文件 {!s} 不存在" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "无法写入 LXDM 配置文件" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 配置文件 {!s} 不存在" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "无法写入 LightDM 配置文件" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 配置文件 {!s} 不存在" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "无法配置 LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "未安装 LightDM 欢迎程序。" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "无法写入 SLIM 配置文件" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 配置文件 {!s} 不存在" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "显示管理器模块中未选择显示管理器。" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "globalstorage 和 displaymanager.conf 配置文件中都没有配置显示管理器。" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "显示管理器配置不完全" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "配置 mkinitcpio." #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr " 未设置
{!s}
要使用的根挂载点。" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "配置加密交换分区。" #: 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} 加入 {level!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 "未知的服务动作 {arg!s},服务名: {name!s},运行级别: {level!s}." #: 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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "安装软件包。" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "软件包处理中(%(count)d/%(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "安装%(num)d软件包。" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "移除%(num)d软件包。" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "软件包管理器错误" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "软件包管理器无法准备更新。命令
{!s}
返回错误代码{!s}。" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "软件包管理器无法更新系统。命令
{!s}
返回错误代码{!s}。" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "启动加载器安装出错" #: src/modules/bootloader/main.py:503 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 "无法在目标中运行 dracut " #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." msgstr "正在配置初始内存文件系统。" #: 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:389 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:30 msgid "Configuring locales." msgstr "正在进行本地化配置。" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "正在保存网络配置。" calamares-3.2.41.1/lang/python/zh_HK/000077500000000000000000000000001410275732300171415ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_HK/LC_MESSAGES/000077500000000000000000000000001410275732300207265ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_HK/LC_MESSAGES/python.po000066400000000000000000000237561410275732300226240ustar00rootroot00000000000000# 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: 2021-07-14 12:55+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:30 msgid "Mounting partitions." msgstr "" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." 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:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." 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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "" #: src/modules/bootloader/main.py:503 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:389 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:30 msgid "Configuring locales." msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "" calamares-3.2.41.1/lang/python/zh_TW/000077500000000000000000000000001410275732300171715ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_TW/LC_MESSAGES/000077500000000000000000000000001410275732300207565ustar00rootroot00000000000000calamares-3.2.41.1/lang/python/zh_TW/LC_MESSAGES/python.po000066400000000000000000000324651410275732300226510ustar00rootroot00000000000000# 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: # Walter Cheuk , 2020 # 黃柏諺 , 2021 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-07-14 12:55+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" "Last-Translator: 黃柏諺 , 2021\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" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." msgstr "設定 GRUB。" #: src/modules/mount/main.py:30 msgid "Mounting partitions." msgstr "正在掛載分割區。" #: src/modules/mount/main.py:144 src/modules/initcpiocfg/main.py:197 #: src/modules/initcpiocfg/main.py:201 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 #: src/modules/openrcdmcryptcfg/main.py:72 #: src/modules/openrcdmcryptcfg/main.py:76 src/modules/fstab/main.py:355 #: src/modules/fstab/main.py:361 src/modules/fstab/main.py:388 #: src/modules/localecfg/main.py:135 src/modules/networkcfg/main.py:39 msgid "Configuration Error" msgstr "設定錯誤" #: src/modules/mount/main.py:145 src/modules/initcpiocfg/main.py:198 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:73 #: src/modules/fstab/main.py:356 msgid "No partitions are defined for
{!s}
to use." msgstr "沒有分割區被定義為
{!s}
以供使用。" #: 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 "在 chroot 中呼叫的 systemctl {arg!s} 回傳了錯誤代碼 {num!s}。" #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 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:69 msgid "Cannot disable systemd target {name!s}." msgstr "無法停用 systemd 目標 {name!s}。" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." msgstr "無法 mask systemd 單位 {name!s}。" #: src/modules/services-systemd/main.py:73 msgid "" "Unknown systemd commands {command!s} and " "{suffix!s} for unit {name!s}." msgstr "" "未知的 systemd 指令 {command!s}{suffix!s} 給單位 " "{name!s}。" #: src/modules/umount/main.py:31 msgid "Unmount file systems." msgstr "解除掛載檔案系統。" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." msgstr "填滿檔案系統。" #: src/modules/unpackfs/main.py:255 msgid "rsync failed with error code {}." msgstr "rsync 失敗,錯誤碼 {} 。" #: src/modules/unpackfs/main.py:300 msgid "Unpacking image {}/{}, file {}/{}" msgstr "正在解壓縮 {}/{},檔案 {}/{}" #: src/modules/unpackfs/main.py:315 msgid "Starting to unpack {}" msgstr "開始解壓縮 {}" #: src/modules/unpackfs/main.py:324 src/modules/unpackfs/main.py:464 msgid "Failed to unpack image \"{}\"" msgstr "無法解開映像檔 \"{}\"" #: src/modules/unpackfs/main.py:431 msgid "No mount point for root partition" msgstr "沒有 root 分割區的掛載點" #: src/modules/unpackfs/main.py:432 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" msgstr "globalstorage 不包含 \"rootMountPoint\" 鍵,不做任何事" #: src/modules/unpackfs/main.py:437 msgid "Bad mount point for root partition" msgstr "root 分割區掛載點錯誤" #: src/modules/unpackfs/main.py:438 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" msgstr "rootMountPoint 為 \"{}\",其不存在,不做任何事" #: src/modules/unpackfs/main.py:454 src/modules/unpackfs/main.py:458 #: src/modules/unpackfs/main.py:478 msgid "Bad unsquash configuration" msgstr "錯誤的 unsquash 設定" #: src/modules/unpackfs/main.py:455 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" msgstr "\"{}\" ({}) 的檔案系統不獲您目前的內核所支援" #: src/modules/unpackfs/main.py:459 msgid "The source filesystem \"{}\" does not exist" msgstr "來源檔案系統 \"{}\" 不存在" #: src/modules/unpackfs/main.py:465 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "找不到 unsquashfs,請確定已安裝 squashfs-tools 軟體包" #: src/modules/unpackfs/main.py:479 msgid "The destination \"{}\" in the target system is not a directory" msgstr "目標系統中的目的地 \"{}\" 不是目錄" #: src/modules/displaymanager/main.py:526 msgid "Cannot write KDM configuration file" msgstr "無法寫入 KDM 設定檔" #: src/modules/displaymanager/main.py:527 msgid "KDM config file {!s} does not exist" msgstr "KDM 設定檔 {!s} 不存在" #: src/modules/displaymanager/main.py:588 msgid "Cannot write LXDM configuration file" msgstr "無法寫入 LXDM 設定檔" #: src/modules/displaymanager/main.py:589 msgid "LXDM config file {!s} does not exist" msgstr "LXDM 設定檔 {!s} 不存在" #: src/modules/displaymanager/main.py:672 msgid "Cannot write LightDM configuration file" msgstr "無法寫入 LightDM 設定檔" #: src/modules/displaymanager/main.py:673 msgid "LightDM config file {!s} does not exist" msgstr "LightDM 設定檔 {!s} 不存在" #: src/modules/displaymanager/main.py:747 msgid "Cannot configure LightDM" msgstr "無法設定 LightDM" #: src/modules/displaymanager/main.py:748 msgid "No LightDM greeter installed." msgstr "未安裝 LightDM greeter。" #: src/modules/displaymanager/main.py:779 msgid "Cannot write SLIM configuration file" msgstr "無法寫入 SLIM 設定檔" #: src/modules/displaymanager/main.py:780 msgid "SLIM config file {!s} does not exist" msgstr "SLIM 設定檔 {!s} 不存在" #: src/modules/displaymanager/main.py:906 msgid "No display managers selected for the displaymanager module." msgstr "未在顯示管理器模組中選取顯示管理器。" #: src/modules/displaymanager/main.py:907 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "顯示管理器清單為空或在 globalstorage 與 displaymanager.conf 中皆未定義。" #: src/modules/displaymanager/main.py:989 msgid "Display manager configuration was incomplete" msgstr "顯示管理器設定不完整" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." msgstr "正在設定 mkinitcpio。" #: src/modules/initcpiocfg/main.py:202 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:77 #: src/modules/fstab/main.py:362 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." msgstr "沒有給定的根掛載點
{!s}
以供使用。" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." msgstr "正在設定已加密的 swap。" #: 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} 到執行層級 {level!s}。" #: 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: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: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: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:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." msgstr "安裝軟體包。" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" msgstr "正在處理軟體包 (%(count)d / %(total)d)" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." msgstr[0] "正在安裝 %(num)d 軟體包。" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." msgstr[0] "正在移除 %(num)d 軟體包。" #: src/modules/packages/main.py:588 src/modules/packages/main.py:600 #: src/modules/packages/main.py:628 msgid "Package Manager error" msgstr "軟體包管理程式錯誤" #: src/modules/packages/main.py:589 msgid "" "The package manager could not prepare updates. The command
{!s}
" "returned error code {!s}." msgstr "軟體包管理程式無法準備更新。指令
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/packages/main.py:601 msgid "" "The package manager could not update the system. The command
{!s}
" " returned error code {!s}." msgstr "軟體包管理程式無法更新系統。指令
{!s}
回傳了錯誤碼 {!s}。" #: src/modules/packages/main.py:629 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:502 msgid "Bootloader installation error" msgstr "開機載入程式安裝錯誤" #: src/modules/bootloader/main.py:503 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 "在目標上執行 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:389 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 step {}" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." msgstr "正在設定語系。" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." msgstr "正在儲存網路設定。" calamares-3.2.41.1/lang/txload.cpp000066400000000000000000000152341410275732300166210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /* * 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 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 ) { QFile file( filename ); QString err; int err_line, err_column; if ( !file.open( QIODevice::ReadOnly ) ) { qDebug() << "Could not open" << filename; return false; } QByteArray ba( file.read( 1024 * 1024 ) ); qDebug() << "Read" << ba.length() << "bytes from" << filename; if ( !doc.setContent( ba, &err, &err_line, &err_column ) ) { qDebug() << "Could not read" << filename << ':' << err_line << ':' << err_column << ' ' << err; file.close(); return false; } file.close(); return true; } QDomElement find_context( QDomDocument& doc, const QString& name ) { QDomElement top = doc.documentElement(); QDomNode n = top.firstChild(); while ( !n.isNull() ) { if ( n.isElement() ) { QDomElement e = n.toElement(); if ( ( e.tagName() == "context" ) && ( e.firstChildElement( "name" ).text() == name ) ) { return e; } } n = n.nextSibling(); } return QDomElement(); } QDomElement find_message( QDomElement& context, const QString& source ) { QDomNode n = context.firstChild(); 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(); } return QDomElement(); } bool merge_into( QDomElement& origin, QDomElement& alternate ) { QDomNode n = alternate.firstChild(); while ( !n.isNull() ) { if ( n.isElement() ) { QDomElement alternateMessage = n.toElement(); if ( alternateMessage.tagName() == "message" ) { QString alternateSourceText = alternateMessage.firstChildElement( "source" ).text(); QString alternateTranslationText = alternateMessage.firstChildElement( "translation" ).text(); QDomElement originMessage = find_message( origin, alternateSourceText ); if ( originMessage.isNull() ) { qDebug() << "No origin translation for" << alternateSourceText; return false; } QString originSourceText = originMessage.firstChildElement( "source" ).text(); QString originTranslationText = originMessage.firstChildElement( "translation" ).text(); if ( alternateSourceText != originSourceText ) { qDebug() << "Mismatch for messages\n" << alternateSourceText << '\n' << originSourceText; return false; } if ( !alternateTranslationText.isEmpty() && ( alternateTranslationText != originTranslationText ) ) { qDebug() << "\n\n\nSource:" << alternateSourceText << "\nTL1:" << originTranslationText << "\nTL2:" << alternateTranslationText; } } } n = n.nextSibling(); } return true; } bool merge_into( QDomDocument& originDocument, QDomElement& context ) { QDomElement name = context.firstChildElement( "name" ); if ( name.isNull() ) { return false; } 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& originDocument, QDomDocument& alternateDocument ) { QDomElement top = alternateDocument.documentElement(); QDomNode n = top.firstChild(); while ( !n.isNull() ) { if ( n.isElement() ) { QDomElement e = n.toElement(); if ( e.tagName() == "context" ) if ( !merge_into( originDocument, e ) ) { return false; } } n = n.nextSibling(); } return true; } int main( int argc, char** argv ) { QCoreApplication a( argc, argv ); if ( argc < 2 ) { qWarning() << usage; return 1; } QDomDocument originDocument( "origin" ); if ( !load_file( argv[ 1 ], originDocument ) ) { return 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 ) ) { qDebug() << "Could not open" << outfilename; return 1; } outfile.write( originDocument.toString( 4 ).toUtf8() ); outfile.close(); return 0; } calamares-3.2.41.1/lang/tz_en.ts000066400000000000000000003134141410275732300163120ustar00rootroot00000000000000 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 Kyiv 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 Zaporizhia Zurich tz_names calamares-3.2.41.1/lang/tz_nl.ts000066400000000000000000003133031410275732300163160ustar00rootroot00000000000000 QObject Africa tz_regions Afrika America tz_regions Amerika Antarctica tz_regions Arctic tz_regions Asia tz_regions Azië Atlantic tz_regions Atlantisch Australia tz_regions Australië Europe tz_regions Europa Indian tz_regions Pacific tz_regions Stille Oceaan 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 Berlijn 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 Parijs 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 calamares-3.2.41.1/lang/tz_ru.ts000066400000000000000000003117121410275732300163350ustar00rootroot00000000000000 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 Цюрих calamares-3.2.41.1/lang/tz_sv.ts000066400000000000000000000055401410275732300163360ustar00rootroot00000000000000 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 calamares-3.2.41.1/lang/tz_tg.ts000066400000000000000000003113671410275732300163270ustar00rootroot00000000000000 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 Тсурих calamares-3.2.41.1/lang/tz_uk.ts000066400000000000000000003134251410275732300163310ustar00rootroot00000000000000 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 calamares-3.2.41.1/lang/tz_vi.ts000066400000000000000000003232261410275732300163300ustar00rootroot00000000000000 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 calamares-3.2.41.1/man/000077500000000000000000000000001410275732300144475ustar00rootroot00000000000000calamares-3.2.41.1/man/calamares.8000066400000000000000000000046741410275732300165030ustar00rootroot00000000000000.TH CALAMARES "8" .SH NAME 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 support. .SH OPTIONS .TP \fB\-h\fR, \fB\-\-help\fR Displays this help. .TP \fB\-v\fR, \fB\-\-version\fR Displays version information. .TP \fB\-d\fR, \fB\-\-debug\fR 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://github.com/calamares/calamares/issues .SH AUTHORS .B calamares is written by Teo Mrnjavac , Adriaan de Groot and an international group of contributors. .LP This man page is written by Jonathan Carter calamares-3.2.41.1/settings.conf000066400000000000000000000221551410275732300164100ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration file for Calamares # # 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. # "modules-search" is a list of strings, each of these can either be a full # path to a directory or the keyword "local". # # "local" means: # - modules in $LIBDIR/calamares/modules, with # - settings in SHARE/calamares/modules or /etc/calamares/modules. # In debug-mode (e.g. calamares -d) "local" also adds some paths # that make sense from inside the build-directory, so that you # can build-and-run with the latest modules immediately. # # Strings other than "local" are taken as paths and interpreted # relative to wherever Calamares is started. It is therefore **strongly** # recommended to use only absolute paths here. This is mostly useful # if your distro has forks of standard Calamares modules, but also # uses some form of upstream packaging which might overwrite those # forked modules -- then you can keep modules somewhere outside of # the "regular" module tree. # # # YAML: list of strings. modules-search: [ local ] # Instances section. This section is optional, and it defines custom instances # 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 # viewmodule) and "owncloud" is the instance name. In the *sequence* # section below, use instance-keys to name instances (instead of just # a module name, for modules which have only a single instance). # # Every module implicitly has an instance with the instance name equal # to its module name, e.g. "welcome@welcome". In the *sequence* section, # mentioning a module without a full instance key (e.g. "welcome") # means that implicit module. # # 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`. 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. # # A module that is often used with instances is shellprocess, which will # run shell commands specified in the configuration file. By configuring # more than one instance of the module, multiple shell sessions can be run # during install. # # YAML: list of maps of string:string key-value pairs. #instances: #- id: owncloud # module: webview # config: owncloud.conf # Sequence section. This section describes the sequence of modules, both # viewmodules and jobmodules, as they should appear and/or run. # # A jobmodule instance key (or name) can only appear in an exec phase, whereas # a viewmodule instance key (or name) can appear in both exec and show phases. # There is no limit to the number of show or exec phases. However, the same # module instance key should not appear more than once per phase, and # deployers should take notice that the global storage structure is persistent # throughout the application lifetime, possibly influencing behavior across # phases. A show phase defines a sequence of viewmodules (and therefore # pages). These viewmodules can offer up jobs for the execution queue. # # An exec phase displays a progress page (with brandable slideshow). This # progress page iterates over the modules listed in the *immediately # preceding* show phase, and enqueues their jobs, as well as any other jobs # from jobmodules, in the order defined in the current exec phase. # # It then executes the job queue and clears it. If a viewmodule offers up a # job for execution, but the module name (or instance key) isn't listed in the # immediately following exec phase, this job will not be executed. # # YAML: list of lists of strings. sequence: - show: - welcome # - notesqml - locale - keyboard - partition - users # - tracking - summary - exec: # - dummycpp # - dummyprocess # - dummypython - partition - mount - unpackfs - machineid - fstab - locale - keyboard - localecfg # - luksbootkeyfile # - luksopenswaphookcfg # - dracutlukscfg # - plymouthcfg - initcpiocfg - initcpio - users - displaymanager - networkcfg - hwclock - services-systemd # - dracut - initramfs # - grubcfg - bootloader - umount - show: # - webview@owncloud - finished # A branding component is a directory, either in SHARE/calamares/branding or # in /etc/calamares/branding (the latter takes precedence). The directory must # contain a YAML file branding.desc which may reference additional resources # (such as images) as paths relative to the current directory. # # A branding component can also ship a QML slideshow for execution pages, # along with translation files. # # Only the name of the branding component (directory) should be specified # here, Calamares then takes care of finding it and loading the contents. # # YAML: string. branding: default # If this is set to true, Calamares will show an "Are you sure?" prompt right # before each execution phase, i.e. at points of no return. If this is set to # false, no prompt is shown. Default is false, but Calamares will complain if # this is not explicitly set. # # YAML: boolean. prompt-install: false # If this is set to true, Calamares will execute all target environment # commands in the current environment, without chroot. This setting should # only be used when setting up Calamares as a post-install configuration tool, # as opposed to a full operating system installer. # # Some official Calamares modules are not expected to function with this # setting. (e.g. partitioning seems like a bad idea, since that is expected to # have been done already) # # Default is false (for a normal installer), but Calamares will complain if # this is not explicitly set. # # YAML: boolean. 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: false # If this is set to true, the "Cancel" button will be disabled entirely. # The button is also hidden from view. # # This can be useful if when e.g. Calamares is used as a post-install # configuration tool and you require the user to go through all the # configuration steps. # # Default is false, but Calamares will complain if this is not explicitly set. # # YAML: boolean. disable-cancel: false # If this is set to true, the "Cancel" button will be disabled once # you start the 'Installation', meaning there won't be a way to cancel # the Installation until it has finished or installation has failed. # # Default is false, but Calamares will complain if this is not explicitly set. # # 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 # that the end of installation has been reached, and that things are ok. # # quit-at-end: false calamares-3.2.41.1/src/000077500000000000000000000000001410275732300144635ustar00rootroot00000000000000calamares-3.2.41.1/src/CMakeLists.txt000066400000000000000000000012211410275732300172170ustar00rootroot00000000000000# === 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 ) add_subdirectory( libcalamaresui ) # all things qml add_subdirectory( qml/calamares ) # application add_subdirectory( calamares ) # plugins add_subdirectory( modules ) # branding components add_subdirectory( branding ) calamares-3.2.41.1/src/branding/000077500000000000000000000000001410275732300162475ustar00rootroot00000000000000calamares-3.2.41.1/src/branding/CMakeLists.txt000066400000000000000000000006161410275732300210120ustar00rootroot00000000000000# === 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 ) calamares-3.2.41.1/src/branding/README.md000066400000000000000000000214601410275732300175310ustar00rootroot00000000000000# Branding directory Branding components can go here, or they can be installed separately. A branding component is a subdirectory with a `branding.desc` descriptor file, containing brand-specific strings in a key-value structure, plus brand-specific images or QML. Such a subdirectory, when placed here, is automatically picked up by CMake and made available to Calamares. It is recommended to package branding separately, so as to avoid forking Calamares just for adding some files. Calamares installs CMake support macros to help create branding packages. See the calamares-branding repository for examples of stand-alone branding. ## Examples There is one example of a branding component included with Calamares, so that it can be run directly from the build directory for testing purposes: - `default/` is a sample brand for the Generic Linux distribution. It uses the default Calamares icons and a as start-page splash it provides a tag-cloud view of languages. The slideshow is a basic one with a few slides of text and a single image. Translations (done by hand, not via the usual mechanism of Calamares translations) in English, Arabic, Dutch and French are available. Since the slideshow can be **any** QML, it is limited only by your designers imagination and your QML experience. For straightforward presentations, see the documentation below. There are more examples in the [calamares-branding][1] repository. [1] https://github.com/calamares/calamares-branding ## API Versions In Calamares versions prior to 3.2.10, the QML slideshow was loaded synchronously when the installation page is shown. This can lead to noticeable lag when showing that page. The QML is written start when it is loaded, by responding to the `onComplete` signal. Calamares 3.2.10 introduces an API versioning scheme which uses different loading mechanisms. - **API version 1** Loads the QML slideshow synchronously, as before. - The QML can use `onComplete` to start timers, etc. for progress or animation. - Translations are supported through `qsTr()` and the language that is in use when the installation slideshow is loaded, will be used (once the installation part is running, it can't change anyway). - **API version 2** Loads the QML slideshow **a**synchronously, on startup (generally during the requirements-checking phase of Calamares) so that no compilation lag is seen. - The QML should **not** use `onComplete`, since the QML is loaded and instantiated at startup. Instead, - The QML should provide functions `onActivate()` and `onLeave()` in the root object of the slideshow. These are called when the slideshow should start (e.g. becomes visible) and stop. - Translations are supported through `qsTr()`. However, since the language can change after the QML is loaded, code should count on the bindings being re-evaluated on language change. Translation updates (e.g. change of language) is **only supported** with Qt 5.10 and later. 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 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 (activated) and is set to *false* when the slideshow is hidden (e.g. when the installation phase is done). - The *actvatedInCalamares* property can be used to set up timers also in V1. - The keyboard shortcuts in the example slideshow are enabled only while the slideshow is visible. ## Translations QML files in a branding component can be translated. Translations should be placed in a subdirectory `lang/` of the branding component directory. Qt translation files are supported (`.ts` sources which get compiled into `.qm`). Inside the `lang` subdirectory all translation files must be named according to the scheme `calamares-_.ts`. The example branding component, called *default*, therefore has translation files names `calamares-default_nl.ts` (similar for other languages than Dutch). Text in your `show.qml` (or whatever *slideshow* is set to in the descriptor file) should be enclosed in this form for translations ``` text: qsTr("This is an example text.") ``` If you use CMake for preparing branding for packaging, the macro `calamares_add_branding_subdirectory()`` (see also *Project Layout*, below) will convert the source `.ts` files to their compiled form). If you are packaging the branding by hand, use ``` lrelease file_en.ts [file_en_GB.ts ..] ``` with all the language suffixes to *file*. ## Presentation The default QML classes provided by Calamares can be used for a simple and straightforward "slideshow" presentation with static text and pictures. To use the default slideshow classes, start with a `show.qml` file with the following content: ``` import QtQuick 2.5; import calamares.slideshow 1.0; Presentation { id: presentation } ``` After the *id*, set properties of the presentation as a whole. These include: - *loopSlides* (default true) When set, clicking past the last slide returns to the very first slide. - *mouseNavigation*, *arrowNavigation*, *keyShortcutsEnabled* (all default true) enable different ways to navigate the slideshow. - *titleColor*, *textColor* change the look of the presentation. - *fontFamily*, *codeFontFamily* change the look of text in the presentation. After setting properties, you can add elements to the presentation. Generally, you will add a few presentation-level elements first, then slides. - For visible navigation arrows, add elements of class *ForwardButton* and *BackwardButton*. Set the *source* property of each to a suitable image. See the `fancy/` example in the external branding-examples repository. It is recommended to turn off other kinds of navigation when visible navigation is used. - To indicate where the user is, add an element of class *SlideCounter*. This indicates in "n / total" form where the user is in the slideshow. - To automatically advance the presentation (for a fully passive slideshow), add a timer that calls the `goToNextSlide()` function of the presentation. See the `default/` example -- remember to start the timer when the presentation is completely loaded. After setting the presentation elements, add one or more Slide elements. The presentation framework will make a slideshow out of the Slide elements, displaying only one at a time. Each slide is an element in itself, so you can put whatever visual elements you like in the slide. They have standard properties for a boring "static text" slideshow, though: - *title* is text to show as slide title - *centeredText* is displayed in a large-ish font - *writeInText* is displayed by "writing it in" to the slide, one letter at a time. - *content* is a list of things which are displayed as a bulleted list. The presentation classes can be used to produce a fairly dry slideshow for the installation process; it is recommended to experiment with the visual effects and classes available in QtQuick. ## Project Layout A branding component that is created and installed outside of Calamares will have a top-level `CMakeLists.txt` that includes some boilerplate to find Calamares, and then adds a subdirectory which contains the actual branding component. The file layout in a typical branding component repository is: ``` / - CMakeLists.txt - componentname/ - show.qml - image1.png ... - lang/ - calamares-componentname_en.ts - calamares-componentname_de.ts ... ``` Adding the subdirectory can be done as follows: - If the directory contains files only, and optionally has a single subdirectory lang/ which contains the translation files for the component, then `calamares_add_branding_subdirectory()` can be used, which takes only the name of the subdirectory. - If the branding component has many files which are organized into subdirectories, use the SUBDIRECTORIES argument to the CMake function to additionally install files from those subdirectories. For example, if the component places all of its images in an `img/` subdirectory, then call `calamares_add_branding_subdirectory( ... SUBDIRECTORIES img)`. It is a bad idea to include `lang/` in the SUBDIRECTORIES list. - The `.ts` files from the `lang/` subdirectory need be be compiled to `.qm` files before being installed. The CMake macro's do this automatically. For manual packaging, use `lrelease` to compile the files. calamares-3.2.41.1/src/branding/default/000077500000000000000000000000001410275732300176735ustar00rootroot00000000000000calamares-3.2.41.1/src/branding/default/banner.png000066400000000000000000000134611410275732300216530ustar00rootroot00000000000000PNG  IHDR@¿ pHYs99ٓFIDATxy\UǿY{5 B "J\ cQEEYD4g1Gg41 I%,IK6&IX;K;Ioq꽪ݯ|Wwﭢ_s9W! ,cSWcP A).*%(AaQ u)E. CbKU 01&b/Do ^C&%m(`p,Ѐ$oG8 j俵_'#DOyX#M!2ķR p # {0 >~ ׀+| X݋"h7$:5GI!z/-p5r;TsX{, <%7ŚW}ߊT43vIOܗuo^p= Kyq/U ƾ7N /j5 d0{vpmCTԟثg)"`5'y[ogc^ɵvWFG1n#L}N>i b p6E߳0R4\ya7縯+3+h}-4n!%<}sP/ŚW~gq@nf-̽)oAa<M@[?r/`,Lc8#F;_Z9>Ͻ_,<~9o5 }$g{(^"-sŷi Xwd,4R 9A}mm 9Oob>\;0EZB:#Q*Uaұj|ɧ]ǧmc_ڋMi6< s+ocxj+cafFcb-B@Ys[rX 9.n𢠵'ZYR`r<ҍqXox0Je>?y#|i׏aq?g<0㱘~)Ҁ<^ۄ|0y3WS"ܴm1 &tw:u=ygWVHe+Ɓ8F1iE<3 p'=nG|EBF?x?^Eڧ~̻Cn\D`gqABi+ZkGqsEշF=瞻*E*ǝN7zD<~is-K4#1I) % }s3iyy4_? x{}9rW|4YׇH~ 業۵1a5a @ͫ#n}t㾼:+y'eYb^,ȩ_(}~O[_x T5 ,5\*Ovd9!;eSCO!>p_j s:LPABZ 뒮<;^1yv}VF_K)c ODW]ү^H9Ĥ\(N#fqz9iO(F49g&}!Yzq[?.`-*w> :ɅG'`ˉa>r?3^>Ha݆;v e)}:rCP;FztkΨ@c V>i&||Xz'RW=(}wAoܻsfLZW0y_.Ĕ9'R|m|0d܃ TE}aߟ_Wk֌ym>\ MuK~^z&|yCϛXX7B}>3Bҭ[qT 6?dA_ȶJǁNAjރv/œ3\ ZXy1)0#ÿuxsv&D~cuG1X)~Ó`ҜJkRLQK[0Fm1曘JSދ)19`90鎗o c%#xcg+0_d6Q$3tVNmnİ7>{> I=Ɏ6 n]9aVװ/KPޣr]_<5P޼lw DD qKO7ǁ%Sj{~ "*d`J.z| 1b(a)9{~sa{#s{0`NAzW[O{V(ea%W)e)9jMb\񶬌m5to"TБ.'EҪ?*qKSN%a :0iI> L3^#j}#a,ǰXH8p_rZ1^BÜT _>VL>x>z0*faȲٸvGY9q>O$8`}rVicEc5MM*[ܮ0K|L0n/aܾa>@JnYmH%8!LqBeGف`0 Bo+ɯc^Cu|n?&,YL7n}uuTwW{ɥ?t33r^~W_9z*kAgn, %Vښj3'|#]nٵh *&߇Wt`k&8VR*!:Dxn4ݲ š6qVݎcmʜS9|!eoy˶hXvej CpoD3=‹y(; . gsbc(a+Q;k V A}O,]P_mı5G@mFk7,_\9J\s(,W mk4 17\qp:JmLjb(KabPw"ԝHum!78laସsff&#P^~395k*(]QC0}*ٲ 5m:ky LK'Ø#.ie"vd0ױ{y߂q\:Ԅg#ԟl8zj`]ZÑ|aTQfyXnǒq= gef(,eQ=b$ʲmK)vlKY)1wcY~Du81쁫%/;:r5R@evVɉ/ ,YL׍cjZc[NBwWv)#)~`ޝ@7 $^oRKR|AXAȃ_p_,nލT%pLmW`pVۋ% uP*] A Yu'F`y陻UAYU>G)j+U+Yl#RnB2AW |"dD8BZp#J!ڏ|c(\` )jR2xdpVij" BAnru+oJ |h:c¨Y,_iY[OOqe䞐*Q FDA^0+ZkD">MT&acI;  44'ώݴK)Wt|$KArw2jG;izr9EUU% cpoCiTreg9H[%_@XAAҭ-HtwQi9*j>>t+mmm'hhkoC;NFz,C--чQRd0xNTTR !{](Ł|J?ʋ o2]u$W)lRvmDOJ)ܿ"[W/ž\c3nhxaڬ^BXAW֌ VRxv,ԏlP +ZklF) n*gٖPmMŃ K.I$ԌmhG'`#ر͡V Wc~3=garb`A!R}Q=۲Q&ZN\jme+m%O &rTN",, DNҐm͆ .O²@n- mB BxWE;2WB4Q̙&(Qܳg7J" , +rdpYu*7ֻmIϮ5 e# , 0~"Z]G+BVJWħO>DAABFFW6. MM[MTv % "a:;Ri LwORZVAʗLsRru'8|9c1, ֌ӧA{Rg)jN.|eaexA'[Y3N/{*7  7a3Eg1$kH A [9Y3nI PtYC!MBA ޙCJԛA^},+AA ,]ݽ֞IENDB`calamares-3.2.41.1/src/branding/default/banner.png.license000066400000000000000000000001501410275732300232630ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 Adriaan de Groot SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/branding/default/branding.desc000066400000000000000000000242471410275732300223300ustar00rootroot00000000000000# 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. # # Additional styling can be done using the stylesheet.qss # file, also in the branding directory. --- 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 # to distinguish this installer from other installers for the # same distribution. welcomeStyleCalamares: false # Should the welcome image (productWelcome, below) be scaled # up beyond its natural size? If false, the image does not grow # with the window but remains the same size throughout (this # 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* # - "noexpand", don't expand automatically, use *windowSize* windowExpanding: normal # Size of Calamares window, expressed as w,h. Both w and h # may be either pixels (suffix px) or font-units (suffix em). # e.g. "800px,600px" # "60em,480px" # This setting is ignored if "fullscreen" is selected for # *windowExpanding*, above. If not set, use constants defined # in CalamaresUtilsGui, 800x520. windowSize: 800px,520px # Placement of Calamares window. Either "center" or "free". # Whether "center" actually works does depend on the window # manager in use (and only makes sense if you're not using # *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 # - "qml", use calamares-sidebar.qml from branding folder # In addition, you **may** specify a side, separated by a comma, # from the kind. Valid sides are: # - "left" (if not specified, uses this) # - "right" # - "top" # - "bottom" # For instance, "widget,right" is valid; so is "qml", which defaults # to putting the sidebar on the left. Also valid is "qml,top". # While "widget,top" is valid, the widgets code is **not** flexible # and results will be terrible. sidebar: widget # Kind of navigation (button panel on the bottom). # - "widget" or unset, use traditional navigation # - "none", hide it entirely # - "qml", use calamares-navigation.qml from branding folder # In addition, you **may** specify a side, separated by a comma, # from the kind. The same sides are valid as for *sidebar*, # 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. # # The four Url strings are the Urls used by the buttons in # the welcome screen, and are not shown to the user. Clicking # on the "Support" button, for instance, opens the link supportUrl. # If a Url is empty, the corresponding button is not shown. # # bootloaderEntryName is how this installation / distro is named # in the boot loader (e.g. in the GRUB menu). # # These strings support substitution from /etc/os-release # if KDE Frameworks 5.58 are available at build-time. When # enabled, @{var-name} is replaced by the equivalent value # from os-release. All the supported var-names are in all-caps, # and are listed on the FreeDesktop.org site, # https://www.freedesktop.org/software/systemd/man/os-release.html # Note that ANSI_COLOR and CPE_NAME don't make sense here, and # are not supported (the rest are). Remember to quote the string # if it contains substitutions, or you'll get YAML exceptions. # # The *Url* entries are used on the welcome page, and they # are visible as buttons there if the corresponding *show* keys # are set to "true" (they can also be overridden). strings: productName: "@{NAME}" shortProductName: Generic version: 2020.2 LTS shortVersion: 2020.2 versionedName: Fancy GNU/Linux 2020.2 LTS "Turgid Tuba" shortVersionedName: FancyGL 2020.2 bootloaderEntryName: FancyGL productUrl: https://calamares.io/ 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 # as small as 16x16 (but possibly larger). # 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 # the window. Use `welcomeExpandingLogo` to make it non-scaled. # Recommended size is 320x150. # # These filenames can also use substitutions from os-release (see above). images: # productBanner: "banner.png" productIcon: "squid.png" productLogo: "squid.png" # productWallpaper: "wallpaper.png" productWelcome: "languages.png" # Colors for text and background components. # # - sidebarBackground is the background of the sidebar # - sidebarText is the (foreground) text color # - sidebarTextHighlight sets the background of the selected (current) step. # Optional, and defaults to the application palette. # - sidebarSelect is the text color of the selected step. # # These colors can **also** be set through the stylesheet, if the # branding component also ships a stylesheet.qss. Then they are # the corresponding CSS attributes of #sidebarApp. style: sidebarBackground: "#292F34" 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. # 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 calamares-3.2.41.1/src/branding/default/lang/000077500000000000000000000000001410275732300206145ustar00rootroot00000000000000calamares-3.2.41.1/src/branding/default/lang/calamares-default_ar.ts000066400000000000000000000010121410275732300252120ustar00rootroot00000000000000 show This is a second Slide element. عرض الثاني This is a third Slide element. عرض الثالث calamares-3.2.41.1/src/branding/default/lang/calamares-default_en.ts000066400000000000000000000010101410275732300252100ustar00rootroot00000000000000 show This is a second Slide element. This is a third Slide element. calamares-3.2.41.1/src/branding/default/lang/calamares-default_eo.ts000066400000000000000000000010371410275732300252220ustar00rootroot00000000000000 show This is a second Slide element. Ĉi tio estas la dua gliteja. This is a third Slide element. Ĉi tio estas la tria gliteja. calamares-3.2.41.1/src/branding/default/lang/calamares-default_fr.ts000066400000000000000000000010441410275732300252240ustar00rootroot00000000000000 show This is a second Slide element. Ceci est la deuxieme affiche. This is a third Slide element. La troisième affice ce trouve ici. calamares-3.2.41.1/src/branding/default/lang/calamares-default_nl.ts000066400000000000000000000010371410275732300252300ustar00rootroot00000000000000 show This is a second Slide element. Dit is het tweede Dia element. This is a third Slide element. Dit is het derde Dia element. calamares-3.2.41.1/src/branding/default/languages.png000066400000000000000000002477621410275732300223710ustar00rootroot00000000000000PNG  IHDR@)#bKGD pHYs+tIMEeiTXtCommentCreated with GIMPd.e IDATx]gX>=y!$ A,9,&Qלb 5cB J sɡWWa癇:U *$Ii`9ݑT $P@j.WA^}h}Ch]B5*P8-V?ݱo+k+4$֪TE5*@6\y67 LT&VZ\Es^ME;Da4R_T Z07rm,NϘŠFNˊI~8N ik.2u $ad< @T ˩GJeo=C/氦Je%7}#+eӃ#3$"UŸL~_jT<䛉%:! pq e兜) 6wgi0&eN hv&Clf/k.D,_!щMGN<.s<×/V\H7]͙7d{$I3yPCxI0zmTAE*JS9Až~1)Uy\&ycsk5OXYG (&IdFL-cct>g1v򘨩bqQ`[9%UM{ N,'.td |~yDyjkw*P4> [@$UI]; `p;Ĭz`sII(dL U-i,6m5w]X_Cܗ-22%=Ә k:>;{FdwnK2TZU>p¿HHHy/"~erzW%(L'Jki&l]+d2Xk 2yA.(ߣ ըB4Wo72'ſ+'0.zwfon7IT?u.0 $٥uaTQ*KJ2eTWR1Z|!qDH\Q "IKL6 vG9й+Z+ ޑkW 6Iz$ٖ֖ S *sxr' FѪkp4Dck35ef'DܱX zZrl 4h om jֵJ)eb S0U!iE u;d]x*˴v"5-u;n;|,oZ~2q6W=A`!P$IA3f=p?O_"!Q=ɩ"8zV, ғJAYkqk*MtXUk7&$m*ʹ84=5R]S[O3'2^.Soޗ[Dt8`w^u %vmJVM#N.75eKٹsꁪ + OfFy5tGsD|sP;,?=8Mz0n?r@pdFUrA$I I ݑČ-.:Z=uܾΐP$#Vr%5!֡q"r]fE2B;w>a}7ӺL>3U¢ Xx2eB؛o[z4Pj3;M y)/5DXx!ͬESV{}}#nj5i]cHB^#<|*ݨnܨo7QMBNwA$}Ѷw |W6jw2m-RЬ>FJvq괭726dOdl9emSq`ڝ|c.xx.ydwޜ8\ ?fcmg^CO.jYVU>sI? C#z:4@j_ $DE*C.k7a“}/(N (T7̬I#`6Dc$Ka&moO0AT>E,fsԴK&JtN2KVQcQ6v 3*@J^}p}<]{ ^2A@P]Ä+r?rE%*Tya#$ILhT aN uWZ+"hh_WA(d" /1M6 ,kk5$ UUU= 4YgaT?X+)j,tS=\.95h[!$  [6]]ҴoWT ⡵-j1*c߼/[g CƈR6$^aTԺV)sԃ#3}fNzlf-kɬu?=|"d}~TzK uq7X:Ejjj7fEn[VgsIqOϧyґ7-`1)6V15b uSG5 E${[R1$p"!!tŹ^zL5fҕ$8S%v̟BJG[ Iqrnyr4+x^;xѡqJÓ%ĸ+L-3ӱA0$_">0Poeb,rHOadȤf{w7`I1(V[j`D`fɸ8L8A|LmKDv$ 3!^!w>$IdktJ$8v-LFZeT8 rW,nZ-M <DZR U32WD+( N4C^{楗夋nMPXA0) 4 :)F/%uR~(BAGuռ !H }^IF\Vj jI[ޙmje+ebEKI00*TREiL*_Gho: ~='1AE,XoC'h I?زAZ9b9P'% [? Hj@_5)A2L$\Sux׋yAbۮɔP\@C-9+|C(_^RݦRtHHSM38H̭SzT.)O[hU4qAn-ãބNr.yYT28D2!,jH|FaqG8QgﱾV}Z^)̰ kŨ%qѠc:c\Vp w4)d;oz|?t8P &;~+%reK招 1^TIF9BP ۤTtySk<;ILUy ՖqJ1qTF֋ҌP"0 2)NfQl[B)G2F42r鎚ƶ{{j?4&59`l /w_tל~GV Sb&$% cp(ۦ>&bξҠrSҶz%1*SX)  +-oIdCsz5|&#Dșwޗ6PHq`G?Ϯp!+dI:6z;[N?TٲsJBPʩ:C)4Dp`{-Pb7ίh;--?'(;h橫kG.t-~z>8;cn+9 "#S杽QCt e0z'=)n.t4gDGWӥhm6=S JTᏆ߬\62p:.2+ss -*9z2xN.3/Z+sqe :"i[}&1zCckT&v$߈a(x,GӇJ}0iT:G֒-;N=m|w 3'Q|!,Hx cVr}uM+*//VFgfDglK|(kjTͿI*B˧r10dZZjO=)tu ٹ-!A$FgN1 -ꗣ2*JU fxs FNt!_~?.NDqPB)GjFJ`U4DtGVmK,i~8;[,B6a^8M=+zlK)0o;G orhzBRha@Hua6DHVO\zӑξ$/3[k:HR[FPYLDi#YkvR)Ju}}hIIEJT &9F|ﬔ =֦fPĽl%--:8W&]8;[ ~&H6Iјbȯ.l8m;fU}3$@6) uʇb e(fv?FoB؛\-݀ |*Ce.+(GkmYfa}ṽG/KB&Q4W3VX89/bh(6;<ܡV{NصNV6zG۬ 4I.nUVߘ rvӣ4o|.I!VX ^am㵭sva!ǠaJABӷ1kA.Rn58N -矗vkڗPJ1=xOχYc8N, qS\NFP#VuQi_\L/3)hlR! \9L)R*܁ HlVI/R+AVuSp;S3Qc)2r>Q v3 b塘#B}Hj> z1ûbFA,w]FmkKp`\ԧfћ=:ﶀPꏷ,Lc]` v)V@`Pܒ ZZ%R1t6_&-#Vr~f.*4)rt|WUP 2 (wxVy6H[L#qr iv_.jɯM?U]<\.WH9WuME_['sMv{oF(d\@P\$(@t|DZ,e|WYcN="&+!엂>?-&2moϾ9yp:+d& a>I9Cߌ LW, :UgܚeB1eArRMe/`>*/6Guݕ@ { 7֊/_r RR!%"@ K:0B׽LK3b&/ZR8iߥ.s{I-%o㜽=52ۍY-Ov\PMe71 !WځzFwSn.G«ӌ`!b7Wݠ|ė=cX~7bTfӯ9 +H@REV:*`lnWg߭}|-$Q%&^9qO?HQ'ko:QX۴Ci+-~϶5?Ap\.i_~ۼHKEyW?jnwZ$ *—:N"e9L'}\r$qZ IvIƙ֕a,WTڀ#X76]xH9aۼxwtm [Z*JӲwEz~SzP\3[smU ԕ4]ݞܱB=c ՞B1i\.94a3| ^-So'S¥i{,]*l)~{`b۫ IKNgґ4SCkr!43 k5a2dc6J>vI.0ٗ'j,-DB̟Rмkm_$l(Dq'Z&4 bTG/7MP*R"Pg$/ėBc1۲e fdm҈ؿcf5y͋Ǐ r4s>n_VVUUAO;sU~P鸺I_0?jtU-[."\}O6>ML%Pip o3kۧ8nAY kY_ >FօoK~#-@-|,4l,jAr 5'b W715r"5[Z+g08)LR$M='sHw-2)zY;葝Ud} ( X4Sit4ɒ]Nil)bJR)+tyi*>.nE oOH0s~k5^v^?!*cങTL˺ĵ8P-魼K~ ~kQk P.ʨ- r2$уk7cP)XfdޭXLʯGudzL\؊й$|}d\FEM=6ک1AOѤuү ,"a@BU!@ڴ̟S~4bvػ`;kw >f~U^IyҥksN5ʳo[Xr1QsI=>;踠V2>#qe1GS"@fdL^|?ca'GOeӨ6抧G}+1_FN[ç/RUVRxߞ򐟼`'L\Eލ95?ј s0aGØ1rBRF0@.5_#HK}|pĪu/K~|{NM_2+325X.[q.nTIIɬ`cW/n.msA(R=0eјi,W_ cx($}uY)^'.ٗ"ޅf'5S)SU7&'|b$FcG)t/궆Fcip[kpoW瞶C64~x*aZ56$ld1DGu'v&/f>_kuşYvb9TPr,?z @aSPJ*]4fڗon>SڛJuw߯qswns٫i'Yf"\,-}BoO@ \ymYg\&:}t6e.K- *K}sSR^}Y~.QP%RX#psvU8NP0:K K)ͦ+Zt$mv㇗#u Yg:r$ UFT\!A+?j{eg蓦*q ut&SŊUzc6+:G M^yk.j8"(b 0jw2cRh[hMLdm$zkP)4pNGfٿJy1sA"Y{}ATLK!3LN$A$ghEKuuHJ LMc]*K=hrmqv8TLh~u˙l<.hy/e]l[|otaB)?$Ics"p]~ip9.2:YW>5(/;?359zU\k\v^ٻۮfW,>$I뵝k"0L )aWPWo~rqK$ /A =ZJ?&8KFr؉+$y"˝b-(Fщ)nhTXscYi A7Q şMoKrM#%|`}>I& |3IA vhzʅugf'MAh &qEubnX$9kŝ6SrgO}'2&P7sBaMGS԰pvJ12M'EVm=z0i%1.քaP|`hV{2Aˇ켙n :`~aciÈʃ _c9e@k0kifbl7t_pS./j]Y_!6U?yv ɭSOw˅,ms5*K]a;Dyz (3&mPot8:/\KSψ} e+rze]w&?KWJ)tK/[ ]sKj",|z;6uԲzUw|@1;!Rh*wjCEyC.lErbm3[}lηci tG"x (&j*[]06&ut#Py)nޣI"A"$I(F8ELxvF~/zϿ0_40hF_5:cS[UN7:|BꚚ w[^3_y2iR.vz0!Ѹz*{›u,(tHs]P' uelfw^f.6O^7#*rʓ`Ø.%p"2JSar.QKU _\^Zވ_bn].~UE<-Ǒ?]@i˪F9xe;8ϔ]~as$`䩀 PIT$IJ4I&=e Wҳ ɺqD/OpEȩgCȚ|𘟾<ۜ;x}#5Ha7( [\+ll_QF.[ҡfN2ԪViXTBP&zh=[zB̷{u/ $JC*sQ!Z2 xkOriv6n>(fk斢6C8THB,"Ulf-G.lk~sШL^ jO~AZKggn3hqBZaP)>= N410$pϹ@ 13,Hq$\ |+C45$5ɜ ([pA1 ltqQ ى%u.g_d{jxu;#XfjsV3>'/KZڦlSVT9M sI}$Gޠ}@)bn̊ m96/+5qZPjo$:GIۘ{V1 H_PWcdQ/2n=6WhZ.^l2"Ըf]m66״Cs*;O%^u糵'٥%n`)zr%[2Wb_I'yB)Y9y,5bbjF4M. g$RMf ׸fnN 85\pY{~/#pCiE %<?'/,|Nm&j.(4MLtTT>Bc0*~8y`JEWy᳏[֎4kD2L\P7WJKyKIwa ^-oM KsN;= C`Ǵm9Z8\7ξu]MKD5}}֪"gAkf纏]cCMe(R^&vB+ivvchsku<}ayZ} 6mfGo~_X_%n{Mh Se̓Cw3 DZ4vb[[2r~_UM \v.9{ͪYW4C^or'?"{snZ( ?9)c7xl.s*i<W$ 9.8M=a6C4-{E宲iDc)UINe%Z.~~'N=)tz .]1@ģ65/)P[y>vO?\R~od7kq7;ge??co=6/r3f^S\+#A)ƽǩѹzȸ})7]3XtUw7n[}bxk5a,ʩbO9vԜ/62- KYue]TJܰ$ ={ڂ cCg=Oygw} NMٌ.]+< S=zSÈï/ _~0*|6 j%HF A5Z4 bk*p`nܝs{T~҇yol `kv·+L _4z^WYصN=ލ{3Kz{;8^8K3i ؚ8km #o5!}kq_4ЇݽW3qq8͸/e};7"rw Xt*K1q^[8|gf B9@MHYR'B1jRq~V#Qq_LtHrw6eȩ'$У/.2+f؄zm']$rӟRS)LlnKf:CF=d2ױHB,SJ54'v=ݦ JJ<'oI xQ,,M+xmVVti϶Bi&ʈŠQ]/ZPn1qBmvD 0LY{ùSY<ԦEP*rqE \z'5b- mEAPr1n"rqw{R*Ak* iHM"fþeFm}?Q0s?8g*S qjD +0![jI%U$)Jͼ$[*ld_(},=:]Os_5AgLq@\fzRyٗCeUAW{, g{m+ϾQ~E\[Y0e7FYsPIg)UyZͅWB~{{nԄo=wM? "O9 _LZElݗ_;wk^2w^Qk'*r_!ۓz}bn1x6`ڔsu67gv/lY<Ԧ iݝz-8rS宀n..gguАᘕ1qVօ3O.r~gϵԓf tYlTP'5Wa8ahBas{wvc]n ޜ|`hӬ-ߑ}1ri7bS>[0o7 m#])kQreɈs5SI~NLWʲ+c`[(nv"NN\2d;%J w#M': 5U< [~8$ 1B"pZrɞ@ׄ %\0tm^?EP-hݼ;}5(+>+(J Q_}%Ƒ$I/EG 1?I#I8OrC_6SLuX@eSJE6kJ`P=]s7owܥ͍PηFl4i?|. ֶ3ؚhD9oCc;{k< V3LN,f q͓ "q>vwjͳ~l,/s:xcg* pyy[Mobj-w@u=r1Od3i|/EMew/rFol>~e}fFtHOǪ{gX=s|WS^πPΐ{kawaє8}3un.Ი 1 (F(t9P UbckE(a}W\Kt4,\^t7SԴ\ 1 ܒnI^Sjr @bmKob羙IKٗC X7|SsӦy?=-j.oT7 vxh֪KFРPT޴@Z}"'w ٲmTTVֱ1կ6ilu'|ZK}NE#5VKjM?ό7/f oHh ɝ#8Neh(IBi$w l= /ZCW!.\߰mwc IDAT:,$6#qr=@ЅZۧw&mu,VwqC~uoFq;eVxah1 re ɯԶJLՕ[9V{vS֒gOn'It[`*b7> &_/x)GGʲ7!j(>+:)ʕzv<n m޹ m4~W@Яc< Fn>݌Դe1$J rdė {GElû'2 9'dČ9bN"&}xwR Xx4= ޲Tɍ/8n?S.u~LWw_%)k/m5!yd~H~lc%h|8ݰUHKCPw =v`d  ʾ>9 0i~@Rmdol]˷y`8An aZ%܄ݷ7T9XS Md9z_UFI)C~Iv}KP-}5<)BnIei>pn3 C8d8%|(F%HWbJ0y;MeQ*=GP 8+q-HI AgփQ4&@<h[Q$\SgBPBǦqè 1 { ݆W~=eohۮsoKn8ND--u TGM4$u94&Τ:\Ahˬ4šį[%; AwZ}.Y11w=o]@!CVCdb-EG{梓hƱo~vzzU0Љo\⡒z3mP쥒I YR궞|9:@&pj"FjZm\%ghY jc\F#6!Hr+;hLK/V6 M:ʗڊ+xʜ3<=D,XP2Tų_ԫ S]fȵ2~8I5e.-_S9Y%/'T wfc;}$;%GVu9^'s.[ʯ[%k]fRK Tm qQ=.]peys-*-j'hMb4H=@-g/oPR#3HLIH Hطk._珢hh)׊b4L :קeԢjz1wPP(m$[54ڸrݖeraÃi5$(J SǨIҘ'сIDСB)@EQ^9okVASWy$!Fg- u{yaϲ?e *Qy>`$I,I89`ٹŐJͅ$şéĔq^WW~, ^cepuetuۧ9uB] ]t%UxL\y@gP"V\qbsJ;T~]XWTPh+Nnx{h,dpw@Q}Csr"ηIL7V*l T)?]'$G|n>;gI_yy pfա|3y6Fs-{6e:rq3?/5B;c|tSs{ރߥ}yhR"XdKPE6.jpeU'yRG_gd88ǵ 𶥰|rXP0}\w۲ jy 'L8-{SXq|v -Α}]U.l"(%;=ļzrk黷pi>h[y֐E~|u|_nK 61Aw+q|j)1V[#-P*JD T ˀ]vz@u&^/v>!N3,+^Q 7yMsqs٦i6ǝo=p0>ōmހ H0j [Z%x-ʺg~u E+4#E+f0m@ 3WSʜGM]xX.ly Tv/.-ꢺO?BgK׿2 _gTƯl]RZ3*9@щ]PR~dA۷oqynY{]bK[x); $͕ƍ/Jjo$s0g?8N .Sw$㌴Y:>I/,\ͧZ?wߝK7=߀&KG`TWOō>T5nPGkʴ#O9jE8*[E~() Lj' Մmf 1Iz7jQ!pP%TTH]E25e b5:ERT8An%!j4m61rP77Ni9@%}V/q/RfLaC)_( =ra[X➥x;^n Z1Ҙ'Zֲgc(tR~_ƧaV_oQ: IyuqBQ qCЙF&8NE(4dB K_y;SR v $TR)UVz6C.RNV7PHXU5)RRh*xAb9,\5i⦲(vPQ @I+Z_n ]teݛzQ7}VKesoc5a"Aiuj7@Eft4Ҳ <9s@Bg}Tf'w,ɰ6iO N|v⨋6,w}4HﻙZM8Oui;[q7b/nDzIyg_ۄh4c ( ݚ*tkrKhC3K(i0Cgѵ{#U.SXg5w}i'XWWL|&^? N]Kj"fjs,T$ӧ{o2tzt?I&]{\ e^[Y!)kwny8~[Ho*68yM%&.s-"$qp\1 Y`?jSy,-Iz \hA:OKڏTRl1I}a gpj^Jvxd݈#^-[ߍo`wt,|yllKHr{Wzf:jk#ɦ4e{ojuj"5oz_:cF,zJ~N_ )yQ{94]U6{"n,ѱ U;N?j ߾gg>1Ou祧(:geV{]gp[Ur#W QݗCrбo,}H 0(.%Tg`ʭZַIakʳf9Z:JXKMfD[ b,iԢVǙ3/,>r~!.fZ7&;jٹ[#uҤf:q݂!Vv*{ O<-3QJ0i}:=ulMank6(Wf{>}m^fgaCC[.eB2քqS_{5;\5jŭԵg+>r5⦲wžs|R*4w2$'H:AԴH64i&¶ q]9M-8_o q\3D?gr4SgyjZ(SӨn` GS._ƕ #tַlչO܌B &}|5ѣ/f T{ jX77}8Ħ `OK݂cz8C'GKa2QC[ϒjc'[̂.@>RYM5ZDg9׊i1i&NF,CRMMivkF?ݷkE,tY\8 6Mw=Nh'VJ-Q}_s }?F|:Z%S~ͤq7d>g rAj7bHkIz~-=?Lٯ2vhI CI7WdYzf{yyKq@0 %nO(d~t]~t] ݚ<2r$ $!C1z%ŕ# %]sYnl\!AP Vzs U*E\S-j( WɄJAxM)'T %Fc,m'|=o$e6<8&}CH\!Ĩ  3){CLWw-Ik"(RhIkN*iZ$+=cCh,Mk"'>g}Ta cmѓ:C. G"|;6*T&+4Jfzhm;:~O pug*.,-܏b>$ITnVi~նj[Ot?'[#5,:dCS,+A9~+ ٻ\-4Bzkb3)sg3ap8QwVX7~le3(LM(8'Y)wޫxs*Us`xV!m!Ut4݋y\++oS)huC),{dGϛ=2N9wza?%0vk1i;q&2>M׌|tēҿ9Y.9=,̓fJ+j yRl{OVx;}$- TDw3 (,^y_RPvI\BH|9hZ&jf#8?U):욋'.@SZԓVhZx˚%/ޡcT& t6OwpG;t IDATCS 3ڶ|x.v}2ʎ6ƷrKu^kR \X;Lu}+3ǨU2MЈ1$FҙJ`skȡ^)8E\Ofߚ:BlBn%Z5* 8yVɱq=EG('!I?A13Au򲲕sfQLOyp4׫O gTfR0P I0EeTR$!+*"bUɎ*h7Qw_'}7e+ 'g`RTe~2iK/\},R^{ܩ;}t|ld~MtE䘻-w:wڏV_o퀂 kLi:8uS3EW+j\P1=9W&~5? šehW*[ =dm(-O Y:#NJ}1Ȓ7ҭevI_ )(Qtv3ʼ.lQF1XM/1h4mH}U[/YWZa4/ͷψz7 1'Ĩ h:hK,IAEWV5vK;ݫij^/ֱ@rq۫Ӝn:WH@)/>v`!y Qxryzn+B؏v6^+wc@m1;GނMWX9W׸E?8ֱRaB:JhR~cڐDB?XRf;vy2=bTA:Gw3j&Wʄ#9'D-+/IrmPRl\}L@){(7 s挖Y\d+_~KUr1\ Qje(f'i']\6~S{jIk#j+6cs~ØZΓblmI2.d-UO3Kڒ9LJ#5?Y{:vWUMCc󆗽9uZ/c惧]Vn?NzVSP 1s6ǜSvY IڤUn#~]Է'8A{4K{c*+Ҍ3EG"ì:fq\.fRT$neRH2d]]oz(5#n 7;93?=ʛb\=ɞ j'wJ4umˉRhVd>ί0 $ xw >t-nH|-_;H\F@M3#}X0Yq@!njVdb]P9:Ip/H:5oѽ^# [oQ{k;^][Ve4K:/81 P9W*hGж=+{ʄSw\p8|I,;p{keKTЎ;LMcVZYGnu?躹 ΋(^ IĞę .dʿRѰ~rͭ)'6E&?|IK6M [2~e_YtSΏ 8NP|]]~=+*PH'}?;)bUv80?~tg0*tMJע6WpiJ*Cci]6l8|YZgj֪5pU<^!njmһ7~ǁw";K)h1қ t .MvfcD9PILWryNà ;c"JSD3gFZj2Bg7H*.k.|/'F=L-XpW*KNVkNau{I79ֵw4WLROsg7c`фh^p[TErǹ,V DlmۀU+N C`m{ݬI"H\69zs]R=G3.$rmD0,o A:hCd Q X`Tj"@Uʄ@Bc %оHkS{2e~.V8=v`^_MO AG>˰gBB1'\.l=\'e1 mAէJxP /ӕZzfU q1W^gP)eo3ТE^ŭ (OSJ~tP[q@)+: n#& &6.Uz1Q}j7\&F\%[ADJ.8pg*m>ELQKk_yKH 'r6kbUIXlg;݆9JA8N »@;ڸ'y@m~n1)_fovrҶFnQh -8rO c4κ|AHm,$M9>W9˹lߐm0y)JCT_rI4C0wxal $I.IhQ pe>ԱW[ ' O2QUB[$iJ<4#[ CӠBgg:~-aSv I‹5]ZT:9djf$X;dЮJ.j7nyr/>9x8N0Mϥo'N8 oH訌OF>G~ (/HWajʊjό5_,~zæS촪>硢f)Jd@_vmԬ"4_$JqN[[5O 5*ovvv*C o/>y)'pX_;+Y͉y5݈R#2fs^Ҩ6Jy\hwK ,ع-JeJI$؏XoCr\>\lDd_qT`B6l&t%QhI$޽lҲ]PB'%軄PCLv}b\чO|"ډa(qńuEH<kQCv(u}b6Fm͓tQ %vȳϝ w6=5RA^G!pU.|tյJTrq T8hl^Į +[njfɛJbk<3u𜁖9 bٜ0qC(M6{w$GHǨj\K 4W&U@!뛡] C2p_q٨E'. %_mg((FeYg}TXSpRI&Iq5^)/%;K&hx;j9ot,{S2$p0x[{KI֧Ϟe%JZ81 9 (EM˴TO)Z0[w[$$ꔜ= H5>6! AP0mYn~=\.$ RF[KrwY_~$s"Q7$Tʢ[">][=顁1-u\F܄qxJO\ \ 5|kq@ö[IZpM]9!n,#I uE*9 QMb\)5 Yh +5%#)pÕ+gw=]]nxaϧ~*JHߤO׏Ӳb*訋s39aٝ& wO%2[K h \Dwb;ӘH`pzd h(?v.B\S;t%s\9v+ILpA<80Y3GM4Fahz;}+|hRAֲv~<$ qOV'nu8sXP)H0]QvTiQL(tvC'&mD&M Tj!oH\Ԋ{_MRQYyv Fc !eYs/9Rx:O]4q'U8inBj=RK'*e_,~}K1 %:b-oI|S`%lʜyv᷷GDNSӜwqAQ(:gvc1;S0j<::Z Ƿ~S0kZX.?PlK~^sO>Ѷ 0A4WYz!iX׏J)lq@P6~J~X^/b* 5D;.ōc7W#p~خEN$ 6>FKb':$d}HM˔ 03eP$gŘ2~ ݚ3?r*$r-5oD]i#%zLc$(vImۧ9)t LR U=;bR88bDr$!U%O2Q0D _傪O x/U|_ҭwV9 Tw+MRCW\ןI<G~Q>[>in/X\[ajdfykg_#_ 3sl Gg2-f'%#h> BƯozpn݉k/oadd*?,Z~4n6U8:q" E^ug,IT5-SΪLkд|qbnVY\}CQ o|Y5/u|]'$m HBgszbRkdf 닙tm=@)Sn/j: -7tŞqx;/-J=Ĺ^/P6 7 <*LOX: tA%&v޺zFcǜK<Ή|r\!(+i~ȑSwLw*+ )˘ םu^E]_] bp 27"bU1yקe/Xھ+掉πVmº#as/_MC g4|~2([.,e~RP71K/F?K8N`8N`ݢ~77!xo3<h;O=$IBw?`et~%weGK١p>䟶 0سq«[0e@\~{q)[/>/`M{59T&gO8L-sndz m`ҰAi_1d%t,&]'(%,O7z7L0TQyhci:`Ӌ=,hB+% 6 sCLMstu q[qSIšGI`'5qst<ӗ1CV̢2 _-uenZ| Snt?䝗[}w7<!n(Y ) qAaM);B1jqi &Ø-*>Xk81iݥq}T{╸2AM#uBKOsHke}&D₲n?[s7tMI_ Q^}޼ >Z8~mPpըT 'zV#C:ڍܞX[R):^~tTwP։A:ޡ TC7YW6=~L̲ IDATƅWBKS ͅgz{@GHePI.C TݓeߨgF9M0$ s~*}FV;>FDkooI3q2nhLc{|֩Y¢[RIlDM70ڑ)W~F@& ԓmKv`>S :m< :-Iō͎| C!vH% z>q VԂȕ8'Hݚ)A[T_,P1b6G ]f, u8`G+gsy-jۤػ/mvCuNfܪC{+ŬJ-*B1۰v[rYw)TZ9r{ c86e0#ļ>cӨsZViZZ")hUV=3混oYq+&΁9WZ'n(Q:1O~eN2,+C-ũ6r./<1]8O/[~h:x+sX1VL<8Un!KϺxw:J6ލK6nㄉLj"뎊"'3Ðs1 渠9'0'sƜs5 Hstaݧo>]U]uAr6,s;;;2\+ kd'{{LرШ83R$&%v Ǥ}4 ^wBVLoW"R$p!Lؗ{~(+{玅$l'8j7~5w?G|{?{-ѕUhdBnK Ev1wau%ˬ * !Jx![ !̛n.]MSļve逍5XXoylUA@Ж\ +CVLYæS"*-Q|Ǥay [1{CleZjQ{*E}S&Os@CAQF%n%R1}M|ԍ7cQwc(caۮjJ|Z=x|y*\`а+~-{ZRT''sLv\d(o(EjDjʏ@-c m`{GZy[uR$ܞJAH={?k\0k_Ă1vXq(6cP *ҹ:$oKH?ݓ|,!*ѹ*u#\c̫KV/i_Ȭ1R u e(Eϭ$  (pAt? mW(t61x1L=s0~䂇;'>ӄRDvj/isH xX821uוk^'淸m `w-Pl'ȿ~.k7'^B G({WuBu6*ozpoE{ a9¯YjNZ.ѥ6!] i5Ț;c܁6E>AR݇O.àe#46az=~2mHb 'd~ׂ8s_\yY1Eaj]@#9%\~llιxɊdJ&:Xn'u8`ģ3}l: JK]b::Ŏ[ U"IZrϕ*~SfYqkOoMN ݐKu$IXs%;Րx`}Q6H- :vAEm7p-ﴗ|,еfm>B-k_5WrҨ8 QKt,Tip9undť,L%l뚶aJ{ hJgקs}Gw4 Zm W^b2H$gJOA_r:S(c**EɛYgHGPJ,;AuHd3.L8$ůrkMu zܩٷ9T+=,r7C S+fx8s~fE 58)1dI{&{XOfNA7*"iԍUg ) +.fg*+;#Y/'Hw3|;èqgl1yC`͜+.\ӗMfu/GsJK(Uo>Y~?9o.m.*/0Mqc CW_:Q|}{G;M]&߼DT&3:iPx#r/s|WcCڳh9xsY# +U9VAZ:OoA48iT㤅;>Ir3<d]H!>d|5WqPɗFGE\d0A6= I>"j$M A%ҩX٬6{;s8F0ÞWYuQ5m 饗_$kX յ+0'XQqV cJQ2Ў9qR*r>=6R 33yPCmPQZ6{vZ'`ѪdOK483>#4gʞݻh\~[:Zqmh@!NeMs ن| ɥGxoPs*\&˫jR:-΁ۅYQzv"(NarJ(]C*I I67&>d9{Jt*ZC)5ă5W;7yK}2?'=#o[]O be{X(7r>8eRSJp:fLabPyT%48"4Is 8t@w# )Aؼ bbNYeQ8aM"0oRA,P>gJbv 9U8N&> iPw+dR5ڐT6ن7AYx|yE7M83Թs&qx˫8$s5!(J]pjʖ_\7hxa C 'f=C)Qj9:L& cȕZԘGy|ϲ@pdиC᱅ǢJE׭Yϥ9=|kYz$e#~+R卾F. (V ]֪4'PA{) 1qmyD"a!$-*+)؁Zo:Ћ p_I)(FgQI ImϷթg7HYצ(Që9LJ%I ȡ^@ gKJc/=aNgؚA (Ё}oZA m/I "*#NƗR۫)LܠM%S$SoePEu{pMTt :4Ue¶s-"U"<[cv;&|u#"&ޖBca*o+58Ҁp4(fPѯ >Ign+ԸݎOo 6^6}G9mw2T94H)s;C7>bfAUΗ% kۤjw EPb(Y̓A7Y $I4h-N^TrykT׳9SFۤDMdƑ,޵ b@klst.~jo2k^LVi'pͭj]EޖwAkbI\{DPyՕGo-9] l-R+D\[qٓc캝)AeZaUoE7z{{@YS=gGED_G_OX5܆'TiIOm{QSKPX*Qs QM5_,CԒ6˪19}^g׫[K=,Z0yQXH̛MBeN(A"UjkK$$F\h$IRtoyt0M=U!BkIZ=S*ȣ"| GjbZP : a?8Lk03 nĻum|(u28CTf׎:j[ʷV~I#pmm?N 1uR3Ϲ6J%$%܎4wش*qK&TCf֘ Y;Υ>2bPY$8r=3i؂vzniL G-2ѻ`S }̔:L/Ad -l .zzcm)7H99qNU|%r¨oSf(ոS $I.SΥu_ZuŊ> /ɽCW^;g3' Oik mkdZ&\d؂℣ X]o7YG\~;f`ʩIܜ ўSƨOf λ-7QOI0_'֜JwiVƟ0h~Qq#+CVI$1JaP 2ykZS]fUܕ#tgs'BKA;& kQ^=B 4`5B:Ijp5>c(jhW,[=KŐ卒ӑ A]gXϕظ\ фV͸Jڿ۪=hl]IYz4O,T"a3<ɪpc(ڪSYNqCpZ{߅&6+=ƔϸPe*W  XLQ0(r.BVțe*m.#D$ J'HkׯvE+EflZ咳;z+S0d "$@O{ݧ fI7sRNWA@%m5&Zy2hcJV}ķ;J"Ә=~jQHơFmy6R| ssײjul[zΎZ~*E\$518ԪE8Aj=.jUrFev,R A)nbElxfMj)- &MqIs[ ΤbhóP.!7K.*Rire!N NCgP$|6U-P2D "wls& @lģ/q΀P?m18icSuQXe T/AqQxB@ 1}+.f3c$M{;=>8^ Iؾf u֬T6wc Ϫw]"&* JUx|â55K;F&ܲ2?1F rrb>g^8o @7wTma@6 @1@Ӄpro@;]񮟍]?Ɵ {SZ>; `p'x 5C&r1 O=-~&xB_^ġqAP[\;EW:־E]t.c QkI? JLZ Sn`Lp}۲3,\ M$Ibsâu׾ vUο;^ EpCԪP3hwWIptXN 2(VⅠ j:QM$4,}s*Hhl=L#XK cZkN=Sk k;:א1:n̈UeYTX!@1*U[% ũBg=tT.ґtpյH k U!},j*~zI翯k'nP^ ? ;~votgU[9"V^r*D2umS܋;AӒ7-{o@퇮muactU/E}s\[A 5?Xԑ['%~ Mlc;`EhK:Bs@)xCw |= C}WzNj v-dұ&Ӛ7Pؼ=mM7s[eKZ1CweE⻼nO{ 'n Wi9Ͷ޶YX[c TIJl /{=JWJjӜ*aٙ k~8zdgmvt0km'ŧ_4Yw5{xi7g?Jm 8t !lΙ[$;syyUe,Vdgl^ "(`i%.(.᭏OMkˠi]J~y l#dA3b8A5خC$>IG6r͢τaICP$J2ljIS *J;>e<66͝CQ}n/ie|һ'Sʽ#ön;wpQq \@01 ҵl:p(\s7y )TRN;7o`z9^BP@oi-=#ȟl}U qxbe鏁Ctm4ا>ۉa̧Rͻ_.yTtbGl/Nf:/Mv[OlHlmĦqP_\/(P 5NVfu\Ûv${u+CP] D\~IP7MU5X}!TY'k6mx 'P&B8CkdwO|ӵ AZdD],TmHj3<l::-kA0e슘:ȴ-Dž8~Ϋc]mg Dih_;& mҀA8 w4 9gm30)`g #J /G;gӱ <OR8H~Ctp8! IDATw+p\Sc*w+h\s=mxc-J-{vA68AHۥyj-'?K֙k :]GVm5!a`H&UY^3t>20wF%xՃgՒCw V;z[_`.Z|;U3sN笗Ca߸xr_<#J7t{nց1KѹFsmզ^:,l/q4'dJeg) c|i,-~gl`*Ymy+gDž'a|N\ B()~'0' \<:g)ħH+ixh/ I`b:j_߫Ը+ttq?eZR C]&W8l;6f-JULT:_Z 2|^W,;KT>@zXdqeFM+=jخ4xkhL:5tۡso%049$881v[4ިY SjpAƈ4yf#aҭ6:-Y- 5.`0Mm1b3 y!*OτZZP٨JWBeq[kQ+ϬvrOw-64)j~\k*+}9'xbߣq o~ÇBv%/݄Җ$IlF1D٬g:Rٺt m|=1 ų+D͹/VΚ?mgcNHv&o៿^8jw4:~v64\<-:6>>~"S v~Hdi:o߿0ę0po곛Wnu0{u_eFC{@R(Sۥ)[Q h-x[:e'^2u(9q7[`HL4]*yvf2O_Ȭ~t82j[kãt+'qao:7wh)]8`ĝ A F_;y(<ݎ[<^W̉\ԥ%U^iINk!VhU%)Em[=n 1!5P5mRBm+/r0 %CE| 4ݺ=zQY ܥM[v3PL}Ǡ~j+M=Q%gRs]zȭSO|, 'U_8 Z/:7Q]PuR }mk #k)3rёG:n8 6\Tqat 3e/G'_>Ro_dB'1_H8N =py]q"IRQJ9RR޶6K*d24U8,uZFeZѹ$u< :z kJqWfV%i3V^;>__oR~srs `X8KzR?`ӘCdn=NhyTO36~+ª~K{}Ughbnc}^%iM_+L{eңz6{i#aq_j/K%p+>mg'];Pj ' s' |isΛf.߶'_d$-J[kt)Qjf"^tIo$in[C9<*B F_Aev`ҋ0wR5UO_g2sMTT|?GHچ٧"g)箼УQBcK GlsitHRo=GqC5B>R1T&7H@BgnEոZQt`dh?$5U({quףTB@)4)V JP~!S5VC x$=dm5gNZBNɸXu[sU}yq 7n68|z:N%m-ztc@+;~,K+E^ GYvS^>G; ܣ<#0 mI=lJo}qxHVQM@PM燭gY mh|xtѶ)BrDOG:z{N2*9d+^cehdQ *˗;\ɸx;za.BO9}Xa0e13GnO\>>Ұs+6=kC$/^r%@y]C7oyjΪ1N}n $ZQ Oc!l=ѫR ]XB~DÛx>ŹzXgߧ܍^puɭQu&@}f˘Mۼgq;H@2Uڂ;tRQKc%|*Z~lWgxSiQ_x ƴ)JKoۺy`GZ)CYxLIuoI|AȑGE:=瞏,I?&>{ޙIB) O7d'8ZFA@MI㒪=zn~¤aЙ?`Ev2dК+S6Te*}Uge#]7~)ut#gʡESn40<?/ByGEn>]ci=>9PT',ox/h} 0tݺ:T*e>AI19`-cQ[$q5Pks?kvYq3ϸ"\\UI<tm \b/ݥ7ziTLDc,=kau&c[e:Fvf1q 뫨,]?+99>Zz+]l;pb&R!`]]q}+Ư0TUigoJJ#pSv$@s*)++ ȸNj-Q~=Yx}-Q9o&tU}gl-^)RuPZ˳e٤@_2ܸd>u5]bͤy I^{٧-#~KbrJ]t,}Rq\m{(pk]ZFN֛L#3PT-i}gQ5V^j?= ['h!X9_K݋zz|q2 gZbZAcP* k:'xyjUR& {1W0})߶Zhf܆NaJ=K_ k*7X8eO&Ms{8\jG?T0-Ǎ֪ӎ14$3gje$kOIX_J=eK+i.Uǔ7ɢ*/\N~:ؼ+.f~x_~G,|i̫Emp.(P[/P0iXtVVb~kʦ9g<*b <6EVӱKv)Kzë*'2a#]ܗ;%lhij5  I hA5YgP{qt!=K\M9/Lҵ6ǟASҹfQ:AaVSP k.$97}ǀфV݇5 C>4̅d[QZL^۳&LI7W}0<1Kz?i2薸`V)}WFR:TJ'sC kQx [$\dkɇvRrWs5ra&(Z$$w6*q1{ +m/ODarz~N|e&nG|6PFB2H&%Tnx[1QoD>_Z)/|M{;I#59Gep +31yKYxd4 @)j.ot0P\;%wyUag<>+k.wfpr6 cEۋ$k8Q2Qno#v KMVpI#Gy9#C V!5rB cVU#.oyk2)I3K򔬥^Xӟ W;Ҷ9dB@cwitgQP N" FP:P*o2xc-~YO^=k~ԑ֫tE#樂pYFU:ഁsF[IֱE>+]n﹝oO=~N Z}/ޯAƛ~饂d Ng%w3؝ZSm_Lbuʣ~~y/(KR$-nbP19E4 N1wNqLlhOh=F(6z `g@gc:<_ce:3sj;l?at[>߭( ^q"quaE[q= .RtPMNA ]z ~ȦW?y|xMa(sLzܻ7vD=6p1^XQ>1L-z(\0ycQr\Sk! ^/@_N8N檏1[n}G0t%4x4v2Q=|oP"xgRAa-ĵ6?egz*>7JچhVS)D%nQ: _A1La)w{Na/7xQmTJwr?n *>1M-h N?g׫ѧţj*QϦ*;ACA+77vksx0$I;P~ $B1eS,|,?dHs= IyT4W?ƩlB_+8]޻e(aU*Uhyos[wK.fǢ.Ӱ:63LO.IA)0TL@!(z%"6z."HrG\rՒ[L\rYhgn:G G0cuZ.lɫM4x$*Fa̋ Z(vL`~|K$ ':G}߳b& \ 7schf?c{G]+w;g|U;xkQL^C, 1uL|s~uw%wuzl I\)ndccn(DQ\ yieպ#^S)LyKYAfC@JZl*9_Xw?Мo1omdw,eO1K*M䭤;\\29bĄ#,?mZ~Uda3xSC/ew Պ"&{N5WXIvW&73ɳk S&oճis$]Ij;81Q@qY2Bd ^tp4]o{&L]XJ4^X#('oERv.À$ s0Aeʌo&,T)mn=_G/]Vr e4*xQ$5wv A5KүQlwWzg9O奞gU8;s=lUJ<=EZ>T.5}(6,tOC3O}&{܏3p]?sk#(ӎ]/nmM' FEFǥތ>:(h[9vNwԛ#){S?d;NoRZ_meqJ ZϢmC 1kzͼ{xY{i<&P3Fq`݅5I(p`%x-0ӟkU$=]dS w6$8IJm4Mg9& FYEqfSbon!Gdu6,ECGu)+ O>װSV!IUoHsNBpyi fM`ɴ[e1;_{F5MeWVZRHk gԦ(biiV+ٝ;w ?ߜ}f~8\deiY%H4U>:?cZv؀mQN\?5&k[vZ+voK.IRe> m vR0 GYʚ,6lkwMH5ŏ\FIn1 m*Q-VN HgEZ sYeR'Ӥ}CFZvh'}QIXdSKIÅ\e}aN#Or.W7j-;j+WWM𠾶7j:dr`jJWw%^Yܝ$)G~Svz:aKV\Ht~gs7r. zfVg_9X`/9;v6@3w5enD% \-#XDweg9hWPzY'N5J/ay mQ%4K+<)#|V-9-xFG&XfUĖ%0Xm_3]N`Z CUj-GV^Lrsr "Yefj\T*Qdfy  9"o>c]?F ԌiRnJJQ .?nX96,m7u)o_C$"T!`X4SoFK($88+RB3IQ@ДljPh];fλ:qՔ.4MQ S=:;;l5GlԩMӳLx/9g1dy (XLKPIg ݗ^ӵsTeaz֕Q (:f+8&e-T:}JM)ot)u3G>Vk姞筒L#n'*J52J 6HBdɻVI(ľˮzJ24A4M8 TjQ*-DĖV*pX):f\jzuAyA|GٽFvX=lJan ߾ǪY pwGU?MuU-6 f܊*FLG.?*䤄/μ. rkkS~rE Z~*bvm%+X/co?pjrf"3*$H/qYVWEZp-A#~&j؅7àGsM@q;2vkoPhT\ݨFxI @~bﭨ3o8,%){GYL@G˅ݍ[Io#*$`c/%T4FPZ[aXD[6}78e0IR =@@Uԫ\}W= MFj|91眳`XapqVLkDߧT?-\}W8Ub#@LV/cɘ:V7h[VT_K=4n>nHf:vNxc@_#M4 撡!MKIbW*Fv4` ??AP!̒8;Z,ZڵLUC/r2La#nF9hՔai_e*BٙhcJ.KTzMLMcaL=@#10VGR+p IU8%V\٠aa)ڏ(uFuKCnRKoPu@\GR7*bbEs+Qv=TifjD<&TU|6~pSϵ/`h 0~_tY^AѺ2m!IR6^OUZjbEI/|P٠b_|]GT)LPVdy^P7񂷝 cˍԕ>7*'N5gk KꤚɅ\Ml:hcG! m\Mz# )mJz8Y=9)ìM%!)+UD}7*)uC@ΫLN@?"icrѮNֳ&I ױZ^wQ;?FljNx1 X18[~!iv~ՙy va#x.WJ?wzoEXR O&tghc`(~ kxLy&fxSL U*~Q#՜6Mr;fT36XBrVQY{!}SEq,"JK<7*8Nǿ)V^Il C Cy6ݙGNN0YH5/1&T6#l/u,֬FYlөe)ΦH]]sDo3}vjF~"+x"#F|SVJ5`"dY>)-[LE^e}?OSzR`;f31`hf٪0uQ!͊k?6HO>zb=j)ŕSjgP[aWv7u* SF4ٖ>7WvUjY'vHS֗$/F_Ա'mdy@л եg]S;R}=L(ߥ|SlWxWSvTXצ#:穽mnX/d\-u=4ppA6Ye2,Pj_/ӎ47YVȷy׾A=w{{t׵l /)5d$wݖC\ 4`3P~xJCYrN^g:bS o<29]z3?WC,xqŀ(z,a'MSRrS/D81 UuXz5蚎 <3Hȓ[V}čɅ;Q~r\-"sNEgij%@RNTT#f`uPbH0p(QfL"8g^\30 (R$,}RUyú-vqҁN}܍(uȈ2߰$I ).H ߈ Ќ e;E$%)b%<}7C>)n!["/'{,t0/cnuvSR̛;$I &}{(,1%pK~z%ts.aI~vLx8ڶ$t}uR~f,tǭ?Uwgkl*fyڊvaJp)E(lom ,vE蓜)$I HM(EH:C'9 8h~>sEEdP_iFGmzo8#k[iy9#$N#j9g7$LVPM(zo?6fM\^ʍ/5m( YG"+n.IрIRZ"ZqG hPo5n@;z5 lV&VP#}<%!Ӆ@hޣ].ʥ2Q&~PRa^El7qR5ۧ}zT6M$ -a(IړiEՊj5Δ߽e,ޡ0h+Ι o XxJ'G} Rgd/lܢNz$a(!W\MJQR{Z,QqX,j-١K9-RhwK& 4Qw>:SA2<~V_NU] ~L#U84L53ӯᩴMh>u;CV3-t#Jɔ 6MPy{S՗ T1>K`Б0y8Xg1}lMxxۉ\!a Na\"2"Qj``H_<G5ZReav• ,TF0pBIN7;rx,L̲\702M%QdqLr3%(LlMxŝ7koq7pqHbkKpV5~x]Į cǿ e\ZV6B#x/WS$r a4E 0yT(旤|8rpG}Dr[z#fg +".@ WK=<*wuX IDATsz!Q8|>MӅ{{UhH*0fHkZZM1ѡ LVj":ǻ:A|D0ٹakyӛ]2tZ5f@4h>MALER/]n= kcy!C~+ObYeu 9xyEz0k-lPjiq!(z)?(T6CZќP#tNb^^ɷrfY|A]ck[m"b-7ol`?W\ƱELla# E;L~_icᆽݍcf׏1uGVp_}Ύ5cB'wv4|lPܗbBgu]tKv7XmhlYW[{X ^)'FEtǒpyEuTʈ;"s#v~f`2;k$lkGߍb>cG\RfULF==>!@˵[+pHt녬2?~gx5ʡnN,hHZёKnEJ+?T~tY:ej+ShC3Kq M.WK+,1\, *LޫQ|H0qǭH ZKVք71&j€3Th長OT8kٻqŵJ6E&rqeǧgk_Q"~Y<}5{K^}WLe QDNptIc?#SNa`yVPԩS7)x- m7]aT?n?󼵂=& ~~/v(1 %=':ނ~S'k~Ԅⷿăo?/@ s7}Pd _q1#eʢ^O4~ϯWuΪKz-z.EǞ ҭldoV\x<]>X,ʀPPoݩyC4ӓDQ_ PR9J Ư|*O.lS%ѐݍo|CQjVGnjsIr1G,)Dfb)/*R֒\QHLE 4mԐz\F(cFm?Y&`o;ڊ|iW5f,Nh81_{v^q{/sn~bpAuez{![ߥ7 kŷfS4b MqgҤFqmD÷*k 6 u,F1Ƣzʗ0.gP`jI]IXxӋk>Z<&)wwWmD3$U=/.,pƘK>x'2j¼yv(ע;d8Ycp1 [8+]-b&]&QhG,hbL' \'-K71qP l^6]eg`9ЮN }WyFZ56w]WG⇠_ǦMok1=f]0wRUu.78g&}<0l_VZ%i`3pHFI [MowQjH+EMI`pyJƫ'u#bk]un_sH(R?uƝn&ωo$?y jߔ\fܲOwc\qgo V~j3y]& kBK7eغ9(# ;הh s &8&$n(`{u4s!G_˦XrEk! Lϋ.݆̍{)9~_a~=wVV{X_?-O7!M6& a;4=bkoW0BV)aMq<έˍ[帏ZwwdsUCZvΧopT}o]+^ӎ!TYNڸY <'Эƞp,cJ|oXX4+1}-sO&a{..'A0 %kP-)']_oⰙoxuYpC4a gPqLιhluUMS0<+<weZӂ*y+֠m]YovmLų _w~_FN[;(-7Rv[nt r2|.n ]JzR03@q@~Ԗ۞fk[ 0tJ-Iy^>ڴ[(&sݺzA$I7cpB>vϷ.v#~IN=PyuFV5ckW!6׼؀dv=\ s3.{|2Uvs1;5==uWiE;i)%Rַ=ᙞo apn݂׽a7ߺ|1=k~} z-g+q[xğqM#L7\ѣ0%/kШz=+++;a(>C8E-ҳ~wNH3,ijb9 UF]~@n`L9peߓ,o{Hp8JS$&N|˽X,rHXj杌1.d:S`h5lPT;4|xr}-޽Sa3:E aIRϴ+inJJRhA#,A1| bb6pծsnmAZ2qZUA"I蔒pA4M1wJ ߶۳qqX6J} J&j'(t[~tJ'~Yo?CϢ=nGOK!Qd U6*4: EI϶WQ2cBzPNJm7S:a-jKK֗7Ğ(Vn;uٮW?7Vԫ{nRyOgy$8LamD^nFde{3["nK4;VzeYRs*>۫d /~N|xg{ w\­ßz |no}t㨴Zy-]  EٗSsʞ i3"ɄZ:D-dw]VP$ѕP|(^c{X%F^p"-,t-oٽP7M;շz5гrED [d6_}U5V,yj?Zs 1]!h?Nk3|8/{q$E &fq t4yF4;w$I1=&wkve3}sqܳ kq'mߴƂ$-n].%`U}>MSttyׅaM3+ @Ө8Y=d+&쏱i\Ck"o$I#6??oׅeYyʒcN3 A"W^ދ+ra6zʗ}-ŝ~]t|YYm`GxCC ܻs33<{3t]t5##}/U(+ Ͼx=E돣6}?1'^9JNwΥY$Eiz"M@i0hԯPK cٌ~?D0//OtřuF*#.U*sfd*!AYQp#-:Oj0t=q97Tɇ*k>Mٙy EuE~%{N92rYq4ãqEY8%I =<+Ґ/[Jjp 14z CNs#}@µ_s)"I TE0|WL^iYEj,8s[BbR IRfawaL~/yc`T PV)%00BPc dƸsbynAʝ-Sh=PdŬ^uήwn֡s 5XJH2,z's۪ѽS_sBqc7[س9;8I _=^h١Mom{̬g3B$)6IR3ӿ5r]a:}PgyZUԯGkC?ٞk1{>X7Jԣeڒӝ\DŽgbe{BY[l[-BA]["4Ov$jъmp/yC?u/t$)ZZ cpNĝѥXooJy1?aLWBC˜Met6PI918}6wDPl)ͣӵ:ñ3Nmт`8ב<&<7&t-`6':m0SAoZt# ow Zkc>\7q}Ӛ8 nGϳZy~B-?qкM=\ߣj90axtͧiOwV5:Mµ{=eFL`PI(j *?PAZz4Ѡ+HjU,m݊`Xۻ~QT1;Nl3'VJ#* | X#ݣ{]wMD`.I!WP-𵶲:p@#c־ZQ'FezjQ y>fN$Jt'5 姣c#n{noL^iMQ:%bT+1";{g޿t(P˫Y˭'9TjJ8<$z:NG db_Y׀ΔZj,/>W0MFX:R$g-V^Lh`AQTFw Aj4@q_4$v걋?upC`Y $s裣+Oh_27<)E1 &DXKo2lqyP"uo$="ys|eR>X{PDDń܌i4f]%t=g%,6*_biXj';Z~V4&bN)&\Z0P [E%$A7`U#voz=\QMQS0.`$QT)Pc+PbNU:G _)ake|` kj2#GhUIX+,kقL+p)qN"gqcHEKP~T3TUfeUTy]9>II7Vؾ<UmFCSrSLx#ͥirUYͬ1no4VIc8C--Oo4F)EΜ>a՟+ Y2*Z;>^].: ms4 h/xD3 ON]hU c$*C#Gm841eyTu$jJr:|9i[]Sf9xaw͍ !GW+fS_)53纴sfLFZǹƥDUJau*wj[53~^@bZ ꩷Nxly{bbr Ҭ쮬׷ʨズK;?++l<)Qlة0 H ZrAR*QE{^1h: C)ZB%^t|< C) qL7>*tM*dCFeJ~iRJ"Xˠ($O)[S5 xeʁq0:3ǡ\ţt삍'֌ gQhic4X?b]9~wbG(n 9Tm5Ux}iy'A~>3xz~О&<"pj[)')TQ,&.+Js0ܸQE,#:Dr@=DjA`TMoҶQ3eV~ڇf}o}3J,"n.Ǚ\mmWT+൶`jAimROɖSRѮ [Sm-~EQ{ %z @1ﵮ"sN Ics;X*gksY)j*9IG| xՐP3q"ߟG}z+t; [D ;þÖ(x< i\RRud$z- O%#;g?ݦ1ѫ"00aJEY!Y~*yZrqQ S"X1{)n[97h$%l7eJ  ] G5:9ZM=e`g wE 3z[ Ǐ^g l_2ۧQNFJglYtس`1ݸ x=)woS(7]ʋrlCۮe'_}Y=D$G'Vv{KD$IoVWׄ_Ljtz vv3WV{IW2w}m=f$xl5@yOpLُ]˞1ⓛD#KN}|:*n`_R/R7bY95sM.NzWݱG i,:Z¦g۪{^]}S [N,cu Ѱ6|"BTfsAR#̩Щj$)JUG )j3zhG7l}'C o*8Z:dcR\Wґλ(>Z5-r1ƎuяxQ̗9i0>=U%mbn8ӑ&zgiwE.!\l|nKz_awm-0zCg%kvTB4e71pWrgٖ_ ,GdMi@% !IFe71p\*?ﲙw!O ?E?`1XZnٟz{triXF˓4C;vo6~+]c2<~:a͑r |c|[Mm 3FN]sQ,?>\{3~>,n&NX%GJ 6ı^_G^:) >*(!Iɫ[o'2ZKR77!ޜ eF5WTѷ+<ʋrrz5z#@JjiՎݝcJW# H\B.YH;79"jkn?˒7Z`(PH䄵@8"O)[f}t͎,MT m 'VpbQwmM+ZVSbSKm5e5{B:üfUG0hs CwWMP&? )jAVvrޥ#-r/V(*mTWfo쐵ŊwCzigAC8LLAr0gJln2^`xa(37Li  I e竛 Z FW>`eol,.g1twZfFW嫺 gzsǥ=1O{jz`L-O=xz7y).oh0 G>L.M} 3^OfrUuϾ]g)&KO~ɻv\)mWZҫ{c[ mEkl‡K,3ƒx.<+vX>vwQs#Z=WFmO~g]Pӡq}uǏk7T335BiSתRodN'd6۽DwlP>ѹg?bwR6#- mGc3@@X!AR rr_vY479M̍PDH‚af1"soL%3qvP_!Zc4( iE@Kǽ{g07ԬCGww[o^`t"(ԏg;, JAբ("#)BQd$ۗk'ؔkzB@P>](|.:4q(g|61i2.>/[CQ>ꩳ'զǞJ99cNʉ1b둋6U {h 9f/VcgCW~uqkƜO`OŠz~c,pZI ' 'nKGU3U[KR'}X4cqtT6`(x[g}%4-i.L\Y]hus,UݷIL1é#V;#`E0; ;0wG?fNAiLLDnUQS׹Z_owGxbMS~)n[j)"oo#EMe)Bʓr PH[+?S}f.H:jMyƽ1AzR~}B&9xԹJjbZ 󅍥Z[% 2a\Q4 Ѱ1Pi (U?͈ $eT5Y H͚w=Q6 H_*I+i\[ZuҢ5vi$/7؍6n~+L<I:FR!8Y8Pס{L/X#6ݾzlDN4$Iy:VeUOt_cȗTv'GY Cq2u(_pBq!R"~f`JA]C&W34LW_sf$ڕbN&(t$I >p1l%`?7h0$!^fZ$I!;K|5˃UUMFgFMbm [MMI,U3%M)k)I~SE53级9aCyhr3+6Et1-2F.j[a6'߉˝ j\}7rymۅmw7[4/űs2RX$.Qk$/*!dbm q_CʣK\ ACc )hEPLjWG:.LV;Fg8ޱGa6SR!bZ ?(RAӾ9&,.ِ95:[لc xkcV[iZo9G)X405ٽ'˄# ;Oe{0CXW4-jg-2IQlG퐠6ߊՈ=E.\TўVR\H$Qpj2 NPr UY@hlôT2{jP8zأM' ]gx˜ `Vܦ(CWPj׺, 5B)>0:vxeuԳsD$Xʲmbֽ>(-͡q/Q {֣<D^!_\ErmdKZ Rb Nrײ0.J ЙO˪ZSONFsSt+4?ZwM2b~Jʳ(|psamtJM_w/ݏEr:[PBR0TTAWL<"N@ .ː?~Qh[=bL/!S6_#2cM#&W ; ޳#ʚ;;y2"*aCoR$Y:7ҕTٱn4O\1ߒ+RΏD,=(䬹 j[3@M`lɈEjʣbGd \6=F)(*yZasgc5؂C\$ l4{2iȐɏVT74{mMzqIuxwwBc  {TW(%l&6+n=ѹ-}-Hd A@](ŕ,%&"\S߲}aN'69kpRIִHTG;m䬰GE $WAP4ms&0D7)/ZISےO op4gR3zQܫQ;7hX ߼7Yukڞrq[3s$I!sQOp ֤"`޽ Qu3)qF5-y z⹃ڏD5AV!cM=~}p?u^{hn׌^c4S9kFAm㧽;h=nggVbbײXpzA4((r4{b.CP L%R:Jg Rb SCWI!ooio *M FP.'l($213ťrg"w=9 p]2NYۂ&#Ucu .5~U3KU}֚ eo2E TW +) Jg}@iڦ7&`RPjloۤEۭeNP"8,N8a&ڜU :z8W+FY|\:Jۅ_zlpTXe)Cwmj&1OW3~<`#X2A$u~h=]R .TdRX>{ɛc -*/ڞSku0JqAqqDXm dА98AQT+ti%Zi:JqJ ݹ8`;"XJa㗺+f0}u ,)4`ԾϣBGvEߺOqj&}Z7կ@ݝrj̦@/u4b <.㔖$j, lAiG=={)[Tv#A_r0ZݫAoVCd` K db>ϰǜw{5ٌpQµ"-qq_uk_c?8NrSNڋF5 ү[rEq,;&T.:]R\֏TVȅ!FAa(kAd}I*Kh|*DZeiMLLEQnRAS_Iu3ȕ, Elx=B,6yUYSv+k+Y)Ǘx̺&hTъ_1}^QjһP"{W}ڎј[4mFȅI͸k&O0԰Kq#յf!(e:xOSO!}4EF2ayA1 :ZZ1IխLeM-B.9e@W&v|b{ۛOj-C*-l,(k!+VGӊZ$I!f^rYϹ&^7LJ Ş~XZc;f-}խcǧDƨ$;y/JuuY5?׳+. ;i/~hv-[?eso߳";$Y" ?}=U^Kphu:;: hd^Hu. ixux-7i*|g=uղK&<4>G"ߨi2ίkX"^䔚r'Zm %mʅ^Y*u87KmfO:²3TɨmJϽ)D ɲYy>~o3UIcW(wgR`i1r.K)桴[SϸK"'lzWC[^WNWRE`C)ܒ⢹R~k/wjڐ"GusĐQ&W~ٛ);[b&E[ -ȸЀRH)+-immrm눟=G$zUšV|"IS_us1Agjo 69f9􋋷8rxCYN[d_e#>bcQp0a' C3Bk[g*CZue,gxo]{UvKE^v]m_>^n~$.%0ґ?ͬ&Id30gI24ʴ{W,_6ԿSc1' Ħ&6Qwܮ ?scr?5p@wkNXʣ;jrXv~ǡ 1A4tumY] ^o}uИ y{c*QYCTA-XK0Vi{؝Gl2;ԴH-Ӎ˱DVM~3n1+!kxyTȝohFsqK%oG?Prv! $Ejܞ$tz ӯo'KpLvMIBFtИU'G(ګ/%2BCasz[鴞Xԉ yBʆ|}pGƼ:oxENvV35yd=wAsxQ028߿Ey#v[/'PH:;rE@W7X ]6FK1 -;p\7' okK}suaXڅ 9*AQ5-$T'3NmIY}-q!~/wN$PB0:7:עPˣ,5W$E (V^ EGYs³iL0< ̨I;RqGqV(N`\ lmFUvz8 1K:!NԲ8ߏ9w 6u8b?8/`ȓrQMQ9IYl9ƺ`0?qPK0Ƕ ZP\PUQ F&R"דp*kZH wwRIߋGG`T/2H3`iX4LEG6rܪ? *kA2&&nL 'Oq7T~]z˲ CP_t՚u0p5]YjJc2RQYBghύ $f Ph_cxݷEO-c RUIM/G?e2E˽ qy +iǒOy+$%2AsA֍ k-]M0,wa] @$CJA՗N<}KjI\[)GTLh E੢g4ӶrQqaC~QVƘ  )7T (CI=V.<Η;W? *Z9 )vrx~eZNc)cMCtWmidc [.>*zN:Wpo(-tgzS@@F;;Ĭֺ;y7~ q~w%]߂krW^]^x.O{*w[MAYB˰~Vԕ.3]n+]-ߌKbrcm!F;uicE#p#{EcoZGM沀T8"d5%:N p+?ʡWFLR@BmË=Q4R! =]^e}` 7+?8w6Bc$.n@fdG|0W2~.?6v|N\񢼰A{F9aԐ\]39`˗V I@`ӳBRdwZ=e9U_3(@g o47_KQrZ>D!PY66T{{dq~uq +)-Ygþ;|O5AjhsyfNe>P0pʐ؂szQ}!kAأ]Ϩ&`aQ!4`ƒSE TtzzCiqşŨ:{o,4$woLClgJ3ˋ> |[ձNMZXG^|Kbo@VU.^|Ra.[KS:{ୀY=PR{PZ?ͥǬOK6xڷvŰhiٚ}> +*\* :rq Gˌ|{՞:A/\BP(6UޮU A(4hl/SdqI! 9 Ae=R7HC=Q4]#_sO*"}MM8iXE!.\fk21Q9yYR\*DI\N'sNEARaI:(m$:UbxMR.2f{gF{<#b>1<3N^_õ#wɠ!u *<6ɕe]V#[F9z $=mml7[4Gø* v_W 4 5+bV uN:AI(PA٣yb[mQKNa )2JEJ^Z6}¬e학*ZP,+hĥB!-](vAƛB``^eB1:V7e؏ԳYBdt%գLgH>\~oPZ:n>')$/lެʺց /(Zp4M'vDe(i3ru4 ͥz A,1%}mGMNmhQKBr4 I(B!M)#,4g+T!\8cFf{8' ')hP2l"^h؋1[kܪGɦIM$ͅNE(@;XИJu5o$Hu`3:=#fO|pxkˊ~VPk P,i!̯*j*LlJ I[2W޵'ZЌM}I\vC BPXbwa3˱ӳ6>ӫWd nlP.4f:J4A:M CFf-AC dL_M]+~t%@bNSm)yՂ 6Q,xۤzAŖٙViQexatbh5-[I ԥ.5aRI<(n}Av.k0{ |k{34c֟ |V@͗o∜ԥ<;Wxwg냾>^>p17tiAnQ5'?\Z~bЂӱIE3<7=SJE('N"18 Q7H@ɼ2kCuSAO/6L((2#m]8;kk]ozMsN!n\jȄU/of'Q(p 'L-rX'mZvH'][9LvIM{$[w2hV< h֫ٽ [TE2\̢i:n6=7&˻I Wٍ^- ZrӠ 6k{ʡoCgX*3f15^E9vs6PJ/72Bc hk'~0AF@C).sm eq՚y=> z`26=/L5wJ_MqGKTeY] (2t]> WeU : gRZ!{sg90k+Oٴ3dJăT!E$.i8M7) O5@z=>kh_xvt@$ PK7߼Qc}fU^džOV14Еd;(A)\V310v* BtBz}ĭ>;{PYbY;d@=C Ϣc S Zg?-f 8MU<0 )*Y5ly`ﮢ^w"H~Kpq0Jpл[~fn)pkKV(T =ܾFK{oj 5R V~v!qy-LV{t!+&dmཻϒ: jEDmUpb4s}5?01ixwZ ^C^~$`*%rۀ 5_i,tawmO;IDAT3?Hf`9 v9ab&<}E!I",P]cJQ^sz #Gqj4 o* )8ɯl"9Ų9sәUm.=2^i"#?{q;L:m I$.W44j_? ~.ԌdV֣e dm<* j:BflmC*,1RSNhqYiښ~yUH$6t^0T>g\Vzl2•luJZf zЙʨBvN`,3>׈$5׊ } +2{"g(ڴr?ueS6V<7A/~\{,UL)@x| Thl+-9A< `dzC_SZ`tE'?$K}lrI>zE'?v-J`dՆ3*^&ʘ}憕:lI;NE\[Ӽӌ/nvߞY,:6âo$\G_>_nOApWxbOcG\9MD2O]w)sk޳j'f_ݗY_,6Y'mUD@dXAX1C]Lx|ٻ,Z=W#rdw/JZc-NW+X_*Y ?Ԕ[r賊V<ACLMa:=T#mv[5V&l>.hɽK4Z%;:@!<\EΣ:rbjFV~Q7KHB> _ }=60PVcz%16=3emrQ5CRΉzP[Më'o:AոLXkd6 q\)aeFr{ޕ㟆g$|j1hmXo]w-mj# z aϠv:ƫҧLq?7#H)nȾ QF (<1dT?^Hf)J`-IⶃBwta3c 5+oᣡxʊpTj^ ) bjZ$29 8 B ĤsJ t ~KX&έqRWx% IQc8 qA8|`aX7]1} G>KqIG\Ԛ|y-rd$1y }{MUU6CYJ!j;s݉yꇕ4M = M.Y\Fb>&Ws KU7P!U2D.l݉Tt.0<-a}Z im^jʌqO34 |,nyf;,n^`2ИJ""Qmf 0~*_+voOraqLJ] (;) #;(,>极0\"`(""(Ѹ1&+&R&Zx.h0$FŨ1D4QFԉ*r) s=} ƨ1Uf+[~~hNQZw7 ri{>LH6gŬ~^,P7׺Mm)C73#f j16XKG.ſn+e~u7`X0d/}B`]wsz-yp+ Sv1zKO 5\ W_<7vĴlJt(>@sXwpT;y} dպĄ3\h4E\t\VMsFҠ@'@Cჟv@y;byN],k>{J+kXdqz;E| WLJ)B(+Ew M|^,yl[foCgyGEH?_AtM4P w\D]aTs#&Aq9Q  8j%J}< hGhou{jX' c%c$-fIHQ|-ֶ֖m_ piBLOM4b`hϱ}7dh^p櫓+su?ªf?S;޸ l:ך-11U[EqPDLGS&}vI~{'G{d;ro3:5[WA6?H%YvsT! aYE0QG)/]T+ II:Leh&y' jYp,~ɳ#($@0 XZ$Ꭾ,1%-+|f\p3 ύRl_: ̲v$c(Ÿ!1re凞M\sjۢhoP@!FG^e3<;`-pVn[DDvMQoV: oKxIC8S*ksrD0qGO8B͹Cv%o0jN$UZ8\[am<$JQDVHLK rm9Xw\~j6_s5v8XT,OlMCTF9X3ҍNtƈs?to\QKL׿bU`bZR%ܾ o+Fw߉0 "~;b:/qMٛ/$Vk,7vKTɲTaVv)$4!kG17Jin0S(x{g=w˼upCkzm8Crl Yo% TE,ȍ$aKCmaR.lEm |_iٗ-%C{\_JZC{GL@(x̊У,&]/ǩuoV}5 mF'Y]Z3$v ;g!q+cJ}>-eܕ+t:cirZ;-HKx&h~uݷqfRH~ƌa72rIyG+ NE$o:磟N>.K.z[ d 5h'5w5[8CGϧ=eϏb٦od委j2 Ǩ2j9fJ!P/įgzy+ҧx;Qe?n9(@7ryKVVU~# $/?$(SGu"P%6gdzGaz`YNxוAjiÜ:\u\2$*PnpKok]a7 *i]*Yizb喢rd̢^̱_%]07{lK~[A!OfIENDB`calamares-3.2.41.1/src/branding/default/languages.png.license000066400000000000000000000001421410275732300237650ustar00rootroot00000000000000SPDX-FileCopyrightText: 2015 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/branding/default/show.qml000066400000000000000000000044121410275732300213670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 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. * */ import QtQuick 2.0; import calamares.slideshow 1.0; Presentation { id: presentation function nextSlide() { console.log("QML Component (default slideshow) Next slide"); presentation.goToNextSlide(); } Timer { id: advanceTimer interval: 1000 running: presentation.activatedInCalamares repeat: true onTriggered: nextSlide() } Slide { Image { id: background source: "squid.png" width: 200; height: 200 fillMode: Image.PreserveAspectFit anchors.centerIn: parent } Text { anchors.horizontalCenter: background.horizontalCenter anchors.top: background.bottom text: "This is a customizable QML slideshow.
"+ "Distributions should provide their own slideshow and list it in
"+ "their custom branding.desc file.
"+ "To create a Calamares presentation in QML, import calamares.slideshow,
"+ "define a Presentation element with as many Slide elements as needed." wrapMode: Text.WordWrap width: presentation.width horizontalAlignment: Text.Center } } Slide { centeredText: qsTr("This is a second Slide element.") } Slide { centeredText: qsTr("This is a third Slide element.") } // When this slideshow is loaded as a V1 slideshow, only // activatedInCalamares is set, which starts the timer (see above). // // In V2, also the onActivate() and onLeave() methods are called. // These example functions log a message (and re-start the slides // from the first). function onActivate() { console.log("QML Component (default slideshow) activated"); presentation.currentSlide = 0; } function onLeave() { console.log("QML Component (default slideshow) deactivated"); } } calamares-3.2.41.1/src/branding/default/squid.png000066400000000000000000000201711410275732300215270ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsXXm7tEXtSoftwarewww.inkscape.org<IDATxy%U}ǿofce`d (}IԲRV*eECXFMRTʊAB2RRj, 00lo7ݵo}Ͻ޿xs{Yix#q["4n>|/(A B@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20Z ghu]}fzрJD2 PX>&']}fq1T*"PdP0Q2`A'H3d7e54BW]%H!tE`R]M.IHt% WXougR]EGM X D/ H>t/ H6t刎p?` $jĒ$,, $b;;`L q"0֠d0,^GAC@xyo|599 L "h#~cQ2h  KwUdaC@'oA&.d;_P+(€ phsxu-K%~FɊ5> dgmSsQcI&-~0f[eZ'(d!RX>6 Qc7jɧl02(lڅwڲ5fl}0Ŀ!7 sleGRL Bi6gPGWiI00/F&뎇0ҖdC0n$ Rmd6ȇL_I20/MdA_Sa.݁JӄD@7@L/@6@H? ~AA&+d>2r%7cgtŠ@os-@o~|ٗF@V z_y}9{7d]C3S|7Uw __{RW 2@ǐ@L )g: bIH,: @nfdKC0I5o1 :@I5O7NUD+d!4p}Pb ;d!4ڇI@ d!$HdD@L *ˏk.BTl"" &݊`A;J DIMUZ$.Sk!"e22 HAFCD#2wSbO{݁ Ą@3Ռ@ dE"an6%bF\LiƳet2V}}5r<ʮ?XۛԁA@LkESUuP{|0E?QT `d1'&t nd i& ld !)&6 tP5:80a$@Z/32WHE>iHL +J\L+&4 j)12 t-)~׊:g%h)p™z[UFOqz/j%Vb2aG$~H_f @JHh_O MW h42m t2&bw$Hr>uA!H)~@'oHh9n^2= 12ӯ !~7"\c,~ALRNc^v<>@h1ƴXt $M"/ cdSHk "( ܊b@X ~?@7g41,~IAAPA@i2/?S^ݎA) /<2_CZ7? qT!Q? 2yHG$#420Ry22&êdXy;@@4Sy*?hM hASќ&m ~>q@ͻB@2`TPaR?.~!}( L}yڞw|Q2-{˧jdĒ( v1ot[#h axGoOgW2c!wM'TN6 (Ǔ{*OejdD0C@L||,T9-ĿDzP9kMGy-hCo )KcBI6^YB@BAj)%4G]C]7 /53+GNjqٶB{)P@NNmʫsGeH )y+( DSiB/"vD2${:,T ( AmT|  BALyR(n_  3g<7 Y} a- E0r(m'lʃ`.V6ݖG^ +dDd0yP| <' 9;S<'{B@Ć bA("eaؑSZH@@Ē%Bs؉ɩEy8yԡuԪVxQ|s Er>X CEhjW'6;w:+Ckk/{KlqK=1V>(fbN r97c&椈  1s CQ7Uze aJ$~Wٹ@=9k€ř6žBu+-"<\mQſƠj ݷ}{?ݦ-1%%TEM1pywW/@t#^B~|+sBQ[MېHM @N^=oDUU'پ ^l޻IOH w~Ga nxd ) 9aH]) |aX/ҷ[ @d 0ŗ@.= 1엡.I@X(Ca u;|݁A]h22 ,I"N~ `q88ثOzl5Z 0 V.|q7Id0pd/kOS @i@~X|`֫uD]1߻t]'p7pqETJEh|q,uaF V^`Wl. Tt07;?DZs)ظi3v^x!6nI#O= >3b[`K  ~@tYFkoV@/ _y ~u V\kk׭tJ`?lw` w|oR~ʏ}|Wnoۙ~/xXWw`a;kC)H>Þ~@0&o<)ʗ|~`j`;o@y> YG W]7߂!aؙSAP{P>񯀒g?6}a-;>90 ?^ \#&&=OӀ'-@#}?4k{<c9ÿE(p̙@ϣvG 9Uh߿l@Bzam2Fz~ B=o^-߁Y[B=oT?L֪8y8ݱ#hKQ~O)R|bcP篁rw W:ǎF_LMNb޽So?.CP+;¨Cy˨Uѕ!ShhI.fg#+Cpn_ HLOM(?Nw{ ? ^OkbKN9t &'0 _ЧG0C8=s&M@Q3m<`3rxcvncH033}?u3ǾY?D]ԣԊ8am y -/_ٱ`}='67ڬj$dri}PpDrX[=yVNR%Ǐ;k`ꈟ b26hL8GZhZf,Ԭ]̎Hcl]7;/ 槁'E"G:npj#ZOx-*T+~PVQ(( e?.roFDKU1/T.M~osr2#c(Λo/j|%c{ Ԭ[|ˋH8*ȹ9mppԪryef}0֞cnDΟ{Se2epsv ˑ t+;Px9Ldյv$~ZFc]( Z<}6`aƖGi娏0_*Zk9R1'eӍ'`ǻ+4Ù Wl|~ bVE0*vv`a 8z4bج[\1]A!&Ø+0CVc5cD#Әp4Z4bƭ|ď8)9W+(wdv}ܮg#!Ua cgjs1j}.֫5^&)rfͩ?Ԯdl[g2"~R)v݁|>su1##زm' Ӡ_i -Fn~lxbx 08p[G!ڏ1ULIyQ|wFUzJ믴5hձ]?aGTQ7m}\sWhhŗ\)?j?cΐ+>JvqKrN8anV}9sGNp~g<ʍ_x'L5(֝]GQ"M uipJ7h742K/"zmb8s~ĐLA;#[X^;>a*v藍)g #+Qy_o]qVϰRg.GREĪի#9i-x@+ >S7 D&ⷿvߋ҆qOOY T1z;122ykそCTƪs B0 8qwP]c6<޽s`/o!(ӯ~.:n;p t'U} n9l\y58'AHӷ~G'0_cp+{OlvhhIP`ϻ8Dc)ۍ7 ^vS߮;fj>;.~Mtz7b>(,^)u!N͞LAmuX(0tr?| ? \tE\ b?R.~ 0p ,:K QpS`z(JlLM oZöW\C34S&Q<7F 4q,{N L.~aDşb10ROFE9W/kL"</:Jc`ظi3v+W KBjk5LNM¨ȕ0#>/B{;i}hJk.BqeX{V9fgP00}c>Sc`0WU7b,n5Z(:BƍW7(jUWc݆ غu;C]a{ Ph8IAUcQ^YfwMDh#~K}UNkӸ)~33(U;sj4< UoDk3%~}-9(~R ~7P*QQ.*\cc@uLMM¨s0ƭ&$`Q{sٹYTJe;ZUN=A|IuGNXr%8`62!hnKĒ\fQH!> "LCj"7I%Ki5+ V` X>19̢T.YmFʭ1p3~8%~>96wo&.iR&wiX|9fffNŝ7EҝRoS58}y";)ݼa5I' `T*Q~_ܭa7C07dԑ}`% Փr3.iR&R-apGV+3ۛM'ҭg$~qgcY8'kȏ5˅ 6ar||;r K)wjZO \SN@zNSr9LL,nPp~6c㤈@ɚ~'/:66AC븳VhON]ӤzMz='w5aٲeӉ4oȨ!jwC)\>0RZ*?nRh@./S\.B0@B}T0`%cW.r4V9-Q\ sLIT@FQU yįyh O w\` &pF&=f9hsg.C_z]^9L0ỉ0z(v0;9hǦ'.AA@ 2 Ad20daok\IENDB`calamares-3.2.41.1/src/branding/default/squid.png.license000066400000000000000000000001421410275732300231440ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/branding/default/stylesheet.qss000066400000000000000000000046031410275732300226170ustar00rootroot00000000000000/* * 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. Missing parts should be filed as issues. The IDs are based on the object names in the C++ code. You can use the Debug Dialog to find out object names: - Open the debug dialog - Choose tab *Tools* - Click *Widget Tree* button The list of object names is printed in the log. Documentation for styling Qt Widgets through a stylesheet can be found at https://doc.qt.io/qt-5/stylesheet-examples.html https://doc.qt.io/qt-5/stylesheet-reference.html In Calamares, styling widget classes is supported (e.g. using `QComboBox` as a selector). This example stylesheet has all the actual styling commented out. The examples are not exhaustive. */ /*** Generic Widgets. * * You can style **all** widgets of a given class by selecting * the class name. Some widgets have specialized sub-selectors. */ /* QPushButton { background-color: green; } */ /*** Main application window. * * The main application window has the sidebar, which in turn * contains a logo and a list of items -- note that the list * can **not** be styled, since it has its own custom C++ * delegate code. */ /* #mainApp { } #sidebarApp { } #logoApp { } */ /*** Welcome module. * * There are plenty of parts, but the buttons are the most interesting * ones (donate, release notes, ...). The little icon image can be * styled through *qproperty-icon*, which is a little obscure. * URLs can reference the QRC paths of the Calamares application * or loaded via plugins or within the filesystem. There is no * comprehensive list of available icons, though. */ /* QPushButton#aboutButton { qproperty-icon: url(:/data/images/release.svg); } #donateButton, #supportButton, #releaseNotesButton, #knownIssuesButton { qproperty-icon: url(:/data/images/help.svg); } */ /*** Partitioning module. * * Many moving parts, which you will need to experiment with. */ /* #bootInfoIcon { } #bootInfoLable { } #deviceInfoIcon { } #defineInfoLabel { } #scrollAreaWidgetContents { } #partitionBarView { } */ /*** Licensing module. * * The licensing module paints individual widgets for each of * the licenses. The item can be collapsed or expanded. */ /* #licenseItem { } #licenseItemFullText { } */ calamares-3.2.41.1/src/calamares/000077500000000000000000000000001410275732300164135ustar00rootroot00000000000000calamares-3.2.41.1/src/calamares/CMakeLists.txt000066400000000000000000000075531410275732300211650ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # set( calamaresSources main.cpp CalamaresApplication.cpp CalamaresWindow.cpp DebugWindow.cpp VariantModel.cpp progresstree/ProgressTreeDelegate.cpp 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 ${CMAKE_BINARY_DIR}/src/libcalamares ${CMAKE_CURRENT_SOURCE_DIR} ) ### 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" ) 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( trans_file calamares_i18n ) set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc ) set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx ) 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} ) ### EXECUTABLE # # "calamares_bin" is the main application, not to be confused with # the target "calamares" which is the non-GUI library part. # add_executable( calamares_bin ${calamaresSources} calamares.qrc ${trans_outfile} ) target_include_directories( calamares_bin PRIVATE ${CMAKE_SOURCE_DIR} ) set_target_properties(calamares_bin PROPERTIES ENABLE_EXPORTS TRUE RUNTIME_OUTPUT_NAME calamares ) 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 Qt5::Core Qt5::Widgets KF5::CoreAddons ) if( WITH_KF5Crash ) 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 . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( FILES ${CMAKE_SOURCE_DIR}/data/images/squid.svg RENAME calamares.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 ) add_executable( test_conf test_conf.cpp ) target_link_libraries( test_conf PUBLIC yamlcpp::yamlcpp Qt5::Core ) endif() calamares-3.2.41.1/src/calamares/CalamaresApplication.cpp000066400000000000000000000221321410275732300231730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "CalamaresApplication.h" #include "CalamaresConfig.h" #include "CalamaresVersionX.h" #include "CalamaresWindow.h" #include "progresstree/ProgressTreeView.h" #include "Branding.h" #include "JobQueue.h" #include "Settings.h" #include "ViewManager.h" #include "modulesystem/ModuleManager.h" #include "utils/CalamaresUtilsGui.h" #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" #include #include #include #include #include /// @brief Convenience for "are the settings in debug mode" static bool isDebug() { return Calamares::Settings::instance() && Calamares::Settings::instance()->debugMode(); } CalamaresApplication::CalamaresApplication( int& argc, char* argv[] ) : QApplication( argc, argv ) , m_mainwindow( nullptr ) , m_moduleManager( nullptr ) { // Setting the organization name makes the default cache // directory -- where Calamares stores logs, for instance -- // //, so we end up with ~/.cache/Calamares/calamares/ // which is excessively squidly. // // setOrganizationName( QStringLiteral( CALAMARES_ORGANIZATION_NAME ) ); setOrganizationDomain( QStringLiteral( CALAMARES_ORGANIZATION_DOMAIN ) ); setApplicationName( QStringLiteral( CALAMARES_APPLICATION_NAME ) ); setApplicationVersion( QStringLiteral( CALAMARES_VERSION ) ); QFont f = font(); CalamaresUtils::setDefaultFontSize( f.pointSize() ); } void CalamaresApplication::init() { Logger::setupLogfile(); cDebug() << "Calamares version:" << CALAMARES_VERSION; cDebug() << Logger::SubEntry << "languages:" << QString( CALAMARES_TRANSLATION_LANGUAGES ).replace( ";", ", " ); if ( !Calamares::Settings::instance() ) { cError() << "Must create Calamares::Settings before the application."; ::exit( 1 ); } initQmlPath(); initBranding(); CalamaresUtils::installTranslator( QLocale::system(), QString() ); setQuitOnLastWindowClosed( false ); setWindowIcon( QIcon( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductIcon ) ) ); cDebug() << Logger::SubEntry << "STARTUP: initSettings, initQmlPath, initBranding done"; initModuleManager(); //also shows main window cDebug() << Logger::SubEntry << "STARTUP: initModuleManager: module init started"; } CalamaresApplication::~CalamaresApplication() { Logger::CDebug( Logger::LOGVERBOSE ) << "Shutting down Calamares..."; Logger::CDebug( Logger::LOGVERBOSE ) << Logger::SubEntry << "Finished shutdown."; } CalamaresApplication* CalamaresApplication::instance() { return qobject_cast< CalamaresApplication* >( QApplication::instance() ); } CalamaresWindow* CalamaresApplication::mainWindow() { return m_mainwindow; } static QStringList brandingFileCandidates( bool assumeBuilddir, const QString& brandingFilename ) { QStringList brandingPaths; if ( CalamaresUtils::isAppDataDirOverridden() ) { brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename ); } else { if ( assumeBuilddir ) { brandingPaths << ( QDir::currentPath() + QStringLiteral( "/src/" ) + brandingFilename ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraDataDirs() ) { brandingPaths << ( s + brandingFilename ); } brandingPaths << QDir( CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/" ).absoluteFilePath( brandingFilename ); brandingPaths << CalamaresUtils::appDataDir().absoluteFilePath( brandingFilename ); } return brandingPaths; } void CalamaresApplication::initQmlPath() { #ifdef WITH_QML if ( !CalamaresUtils::initQmlModulesDir() ) { ::exit( EXIT_FAILURE ); } #endif } void CalamaresApplication::initBranding() { QString brandingComponentName = Calamares::Settings::instance()->brandingComponentName(); if ( brandingComponentName.simplified().isEmpty() ) { cError() << "FATAL: branding component not set in settings.conf"; ::exit( EXIT_FAILURE ); } QString brandingDescriptorSubpath = QString( "branding/%1/branding.desc" ).arg( brandingComponentName ); QStringList brandingFileCandidatesByPriority = brandingFileCandidates( isDebug(), brandingDescriptorSubpath ); QFileInfo brandingFile; bool found = false; foreach ( const QString& path, brandingFileCandidatesByPriority ) { QFileInfo pathFi( path ); if ( pathFi.exists() && pathFi.isReadable() ) { brandingFile = pathFi; found = true; break; } } if ( !found || !brandingFile.exists() || !brandingFile.isReadable() ) { cError() << "Cowardly refusing to continue startup without branding." << Logger::DebugList( brandingFileCandidatesByPriority ); if ( CalamaresUtils::isAppDataDirOverridden() ) { cError() << "FATAL: explicitly configured application data directory is missing" << brandingComponentName; } else { cError() << "FATAL: none of the expected branding descriptor file paths exist."; } ::exit( EXIT_FAILURE ); } new Calamares::Branding( brandingFile.absoluteFilePath(), this ); } void CalamaresApplication::initModuleManager() { m_moduleManager = new Calamares::ModuleManager( Calamares::Settings::instance()->modulesSearchPaths(), this ); connect( m_moduleManager, &Calamares::ModuleManager::initDone, this, &CalamaresApplication::initView ); m_moduleManager->init(); } /** @brief centers the widget @p w on (a) screen * * This tries to duplicate the (deprecated) qApp->desktop()->availableGeometry() * placement by iterating over screens and putting Calamares in the first * one where it fits; this is *generally* the primary screen. * * With debugging, it would look something like this (2 screens attached, * primary at +1080+240 because I have a very strange X setup). Before * being mapped, the Calamares window is at +0+0 but does have a size. * The first screen's geometry includes the offset from the origin in * screen coordinates. * * Proposed window size: 1024 520 * Window QRect(0,0 1024x520) * Screen QRect(1080,240 2560x1440) * Moving QPoint(1848,700) * Screen QRect(0,0 1080x1920) * */ static void centerWindowOnScreen( QWidget* w ) { QList< QScreen* > screens = qApp->screens(); QPoint windowCenter = w->rect().center(); QSize windowSize = w->rect().size(); for ( const auto* screen : screens ) { QSize screenSize = screen->availableGeometry().size(); if ( ( screenSize.width() >= windowSize.width() ) && ( screenSize.height() >= windowSize.height() ) ) { w->move( screen->availableGeometry().center() - windowCenter ); break; } } } void CalamaresApplication::initView() { cDebug() << "STARTUP: initModuleManager: all modules init done"; initJobQueue(); cDebug() << "STARTUP: initJobQueue done"; m_mainwindow = new CalamaresWindow(); //also creates ViewManager connect( m_moduleManager, &Calamares::ModuleManager::modulesLoaded, this, &CalamaresApplication::initViewSteps ); connect( m_moduleManager, &Calamares::ModuleManager::modulesFailed, this, &CalamaresApplication::initFailed ); QTimer::singleShot( 0, m_moduleManager, &Calamares::ModuleManager::loadModules ); if ( Calamares::Branding::instance() && Calamares::Branding::instance()->windowPlacementCentered() ) { centerWindowOnScreen( m_mainwindow ); } cDebug() << "STARTUP: CalamaresWindow created; loadModules started"; } void CalamaresApplication::initViewSteps() { cDebug() << "STARTUP: loadModules for all modules done"; m_moduleManager->checkRequirements(); if ( Calamares::Branding::instance()->windowMaximize() ) { m_mainwindow->setWindowFlag( Qt::FramelessWindowHint ); m_mainwindow->showMaximized(); } else { m_mainwindow->show(); } cDebug() << "STARTUP: Window now visible and ProgressTreeView populated"; cDebug() << Logger::SubEntry << Calamares::ViewManager::instance()->viewSteps().count() << "view steps loaded."; Calamares::ViewManager::instance()->onInitComplete(); } void CalamaresApplication::initFailed( const QStringList& l ) { cError() << "STARTUP: failed modules are" << l; m_mainwindow->show(); } void CalamaresApplication::initJobQueue() { Calamares::JobQueue* jobQueue = new Calamares::JobQueue( this ); new CalamaresUtils::System( Calamares::Settings::instance()->doChroot(), this ); Calamares::Branding::instance()->setGlobals( jobQueue->globalStorage() ); } calamares-3.2.41.1/src/calamares/CalamaresApplication.h000066400000000000000000000030761410275732300226460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CALAMARESAPPLICATION_H #define CALAMARESAPPLICATION_H #include class CalamaresWindow; namespace Calamares { class ModuleManager; } /** * @brief The CalamaresApplication class extends QApplication to handle * Calamares startup and lifetime of main components. */ class CalamaresApplication : public QApplication { Q_OBJECT public: CalamaresApplication( int& argc, char* argv[] ); ~CalamaresApplication() override; /** * @brief init handles the first part of Calamares application startup. * After the main window shows up, the latter part of the startup sequence * (including modules loading) happens asynchronously. */ void init(); static CalamaresApplication* instance(); /** * @brief mainWindow returns the Calamares application main window. */ CalamaresWindow* mainWindow(); private slots: void initView(); void initViewSteps(); void initFailed( const QStringList& l ); private: // Initialization steps happen in this order void initQmlPath(); void initBranding(); void initModuleManager(); void initJobQueue(); CalamaresWindow* m_mainwindow; Calamares::ModuleManager* m_moduleManager; }; #endif // CALAMARESAPPLICATION_H calamares-3.2.41.1/src/calamares/CalamaresWindow.cpp000066400000000000000000000466671410275732300222220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "CalamaresWindow.h" #include "Branding.h" #include "CalamaresConfig.h" #include "DebugWindow.h" #include "Settings.h" #include "ViewManager.h" #include "progresstree/ProgressTreeView.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Qml.h" #include "utils/Retranslator.h" #include #include #include #include #include #include #include #ifdef WITH_QML #include #include #include #include #endif #include static inline int windowDimensionToPixels( const Calamares::Branding::WindowDimension& u ) { if ( !u.isValid() ) { return 0; } if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Pixies ) { return static_cast< int >( u.value() ); } if ( u.unit() == Calamares::Branding::WindowDimensionUnit::Fonties ) { return static_cast< int >( u.value() * CalamaresUtils::defaultFontHeight() ); } 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; } /** @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( parent ); sideBox->setObjectName( "sidebarApp" ); QBoxLayout* sideLayout = new QVBoxLayout; sideBox->setLayout( sideLayout ); // Set this attribute into qss file sideBox->setFixedWidth( desiredWidth ); sideBox->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); QHBoxLayout* logoLayout = new QHBoxLayout; sideLayout->addLayout( logoLayout ); logoLayout->addStretch(); QLabel* logoLabel = new QLabel( sideBox ); logoLabel->setObjectName( "logoApp" ); //Define all values into qss file { QPalette plt = sideBox->palette(); sideBox->setAutoFillBackground( true ); plt.setColor( sideBox->backgroundRole(), branding->styleString( Calamares::Branding::SidebarBackground ) ); plt.setColor( sideBox->foregroundRole(), branding->styleString( Calamares::Branding::SidebarText ) ); sideBox->setPalette( plt ); logoLabel->setPalette( plt ); } logoLabel->setAlignment( Qt::AlignCenter ); logoLabel->setFixedSize( 80, 80 ); logoLabel->setPixmap( branding->image( Calamares::Branding::ProductLogo, logoLabel->size() ) ); logoLayout->addWidget( logoLabel ); logoLayout->addStretch(); ProgressTreeView* tv = new ProgressTreeView( sideBox ); tv->setModel( viewManager ); tv->setFocusPolicy( Qt::NoFocus ); sideLayout->addWidget( tv ); if ( debug && debug->enabled() ) { QPushButton* debugWindowBtn = new QPushButton; debugWindowBtn->setObjectName( "debugButton" ); CALAMARES_RETRANSLATE_FOR( debugWindowBtn, debugWindowBtn->setText( QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "Show debug information" ) ); ); sideLayout->addWidget( debugWindowBtn ); debugWindowBtn->setFlat( true ); debugWindowBtn->setCheckable( true ); QObject::connect( debugWindowBtn, &QPushButton::clicked, debug, &Calamares::DebugWindowManager::show ); QObject::connect( debug, &Calamares::DebugWindowManager::visibleChanged, debugWindowBtn, &QPushButton::setChecked ); } CalamaresUtils::unmarginLayout( sideLayout ); return sideBox; } static QWidget* getWidgetNavigation( Calamares::DebugWindowManager*, Calamares::ViewManager* viewManager, QWidget* parent, Qt::Orientation, int ) { 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" ) ), QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Back" ), navigation ); back->setObjectName( "view-button-back" ); 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" ) ), QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Next" ), navigation ); next->setObjectName( "view-button-next" ); 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" ) ), QCoreApplication::translate( CalamaresWindow::staticMetaObject.className(), "&Cancel" ), navigation ); quit->setObjectName( "view-button-cancel" ); 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; } #ifdef WITH_QML static inline void setDimension( QQuickWidget* w, Qt::Orientation o, int desiredWidth ) { 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-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 * on the given window, based on the flavor. */ template < typename widgetMaker, typename... args > QWidget* flavoredWidget( Calamares::Branding::PanelFlavor flavor, Qt::Orientation o, Calamares::DebugWindowManager* w, QWidget* parent, widgetMaker widget, widgetMaker qml, // Only if WITH_QML is on args... a ) { #ifndef WITH_QML Q_UNUSED( qml ) #endif auto* viewManager = Calamares::ViewManager::instance(); switch ( flavor ) { case Calamares::Branding::PanelFlavor::Widget: return widget( w, viewManager, parent, o, a... ); #ifdef WITH_QML case Calamares::Branding::PanelFlavor::Qml: return qml( w, viewManager, parent, o, a... ); #endif case Calamares::Branding::PanelFlavor::None: return nullptr; } __builtin_unreachable(); } /** @brief Adds widgets to @p layout if they belong on this @p side */ static inline void insertIf( QBoxLayout* layout, Calamares::Branding::PanelSide side, QWidget* first, Calamares::Branding::PanelSide firstSide ) { if ( first && side == firstSide ) { layout->addWidget( first ); } } CalamaresWindow::CalamaresWindow( QWidget* parent ) : QWidget( parent ) , 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( 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; using CalamaresUtils::windowPreferredHeight; using CalamaresUtils::windowPreferredWidth; using PanelSide = Calamares::Branding::PanelSide; // Needs to match what's checked in DebugWindow this->setObjectName( "mainApp" ); QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); QSize minimumSize( qBound( windowMinimumWidth, availableSize.width(), windowPreferredWidth ), qBound( windowMinimumHeight, availableSize.height(), windowPreferredHeight ) ); setMinimumSize( minimumSize ); cDebug() << "Available desktop" << availableSize << "minimum size" << minimumSize; auto brandingSizes = branding->windowSize(); int w = qBound( minimumSize.width(), windowDimensionToPixels( brandingSizes.first ), availableSize.width() ); int h = qBound( minimumSize.height(), windowDimensionToPixels( brandingSizes.second ), availableSize.height() ); cDebug() << Logger::SubEntry << "Proposed window size:" << w << h; resize( w, h ); 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::ensureSize, this, &CalamaresWindow::ensureSize ); } // NOTE: Although the ViewManager has a signal cancelEnabled() that // signals when the state of the cancel button changes (in // particular, to disable cancel during the exec phase), // we don't connect to it here. Changing the window flag // for the close button causes uncomfortable window flashing // and requires an extra show() (at least with KWin/X11) which // is too annoying. Instead, leave it up to ignoring-the-quit- // event, which is also the ViewManager's responsibility. QBoxLayout* mainLayout = new QHBoxLayout; QBoxLayout* contentsLayout = new QVBoxLayout; contentsLayout->setSpacing( 0 ); QWidget* sideBox = flavoredWidget( branding->sidebarFlavor(), ::orientation( branding->sidebarSide() ), m_debugManager, baseWidget, ::getWidgetSidebar, ::getQmlSidebar, qBound( 100, CalamaresUtils::defaultFontHeight() * 12, w < windowPreferredWidth ? 100 : 190 ) ); 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 insertIf( contentsLayout, PanelSide::Top, sideBox, branding->sidebarSide() ); insertIf( contentsLayout, PanelSide::Top, navigation, branding->navigationSide() ); contentsLayout->addWidget( m_viewManager->centralWidget() ); insertIf( contentsLayout, PanelSide::Bottom, navigation, branding->navigationSide() ); insertIf( contentsLayout, PanelSide::Bottom, sideBox, branding->sidebarSide() ); // .. and then the mainLayout left-to-right insertIf( mainLayout, PanelSide::Left, sideBox, branding->sidebarSide() ); insertIf( mainLayout, PanelSide::Left, navigation, branding->navigationSide() ); mainLayout->addLayout( contentsLayout ); 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::ensureSize( QSize size ) { auto mainGeometry = this->geometry(); QSize availableSize = qApp->desktop()->availableGeometry( this ).size(); // 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 ); } void CalamaresWindow::closeEvent( QCloseEvent* event ) { if ( ( !m_viewManager ) || m_viewManager->confirmCancelInstallation() ) { event->accept(); qApp->quit(); } else { event->ignore(); } } calamares-3.2.41.1/src/calamares/CalamaresWindow.h000066400000000000000000000023151410275732300216450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CALAMARESWINDOW_H #define CALAMARESWINDOW_H #include #include namespace Calamares { class DebugWindowManager; class ViewManager; } // namespace Calamares /** * @brief The CalamaresWindow class represents the main window of the Calamares UI. */ class CalamaresWindow : public QWidget { Q_OBJECT public: CalamaresWindow( QWidget* parent = nullptr ); ~CalamaresWindow() override {} public Q_SLOTS: /** * 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 ensureSize( QSize size ); protected: virtual void closeEvent( QCloseEvent* e ) override; private: Calamares::DebugWindowManager* m_debugManager = nullptr; Calamares::ViewManager* m_viewManager = nullptr; }; #endif // CALAMARESWINDOW_H calamares-3.2.41.1/src/calamares/DebugWindow.cpp000066400000000000000000000217371410275732300213470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "DebugWindow.h" #include "ui_DebugWindow.h" #include "Branding.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 #include "ViewManager.h" #include "viewpages/PythonQtViewStep.h" #include #endif #include #include #include #include /** * @brief crash makes Calamares crash immediately. */ static void crash() { volatile int* a = nullptr; *a = 1; } /// @brief Print out the widget tree (names) in indented form. static void dumpWidgetTree( QDebug& deb, const QWidget* widget, int depth ) { if ( !widget ) { return; } deb << Logger::Continuation; for ( int i = 0; i < depth; ++i ) { deb << ' '; } deb << widget->metaObject()->className() << widget->objectName(); for ( const auto* w : widget->findChildren< QWidget* >( QString(), Qt::FindDirectChildrenOnly ) ) { dumpWidgetTree( deb, w, depth + 1 ); } } namespace Calamares { DebugWindow::DebugWindow() : QWidget( nullptr ) , m_ui( new Ui::DebugWindow ) , m_globals( JobQueue::instance()->globalStorage()->data() ) , m_globals_model( std::make_unique< VariantModel >( &m_globals ) ) , m_module_model( std::make_unique< VariantModel >( &m_module ) ) { GlobalStorage* gs = JobQueue::instance()->globalStorage(); m_ui->setupUi( this ); m_ui->globalStorageView->setModel( m_globals_model.get() ); 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(); } ); // JobQueue page m_ui->jobQueueText->setReadOnly( true ); connect( JobQueue::instance(), &JobQueue::queueChanged, this, [this]( const QStringList& jobs ) { m_ui->jobQueueText->setText( jobs.join( '\n' ) ); } ); // Modules page QStringList modulesKeys; for ( const auto& m : ModuleManager::instance()->loadedInstanceKeys() ) { modulesKeys << m.toString(); } QStringListModel* modulesModel = new QStringListModel( modulesKeys ); m_ui->modulesListView->setModel( modulesModel ); m_ui->modulesListView->setSelectionMode( QAbstractItemView::SingleSelection ); m_ui->moduleConfigView->setModel( m_module_model.get() ); #ifdef WITH_PYTHONQT QPushButton* pythonConsoleButton = new QPushButton; pythonConsoleButton->setText( "Attach Python console" ); 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() ) { if ( step->moduleInstanceKey() == module->instanceKey() ) { PythonQtViewStep* pqvs = qobject_cast< PythonQtViewStep* >( step ); if ( pqvs ) { QWidget* consoleWindow = new QWidget; QWidget* console = pqvs->createScriptingConsole(); console->setParent( consoleWindow ); QVBoxLayout* layout = new QVBoxLayout; consoleWindow->setLayout( layout ); layout->addWidget( console ); 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 ); 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; } } } } ); #endif connect( m_ui->modulesListView->selectionModel(), &QItemSelectionModel::selectionChanged, this, [this #ifdef WITH_PYTHONQT , pythonConsoleButton #endif ] { QString moduleName = m_ui->modulesListView->currentIndex().data().toString(); Module* module = ModuleManager::instance()->moduleInstance( ModuleSystem::InstanceKey::fromString( moduleName ) ); if ( module ) { m_module = module->configurationMap(); m_module_model->reload(); m_ui->moduleConfigView->expandAll(); m_ui->moduleTypeLabel->setText( module->typeString() ); m_ui->moduleInterfaceLabel->setText( module->interfaceString() ); #ifdef WITH_PYTHONQT pythonConsoleButton->setVisible( module->interface() == Module::Interface::PythonQt && module->type() == Module::Type::View ); #endif } } ); // 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 ); } } ); // 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" ) ); ); } void DebugWindow::closeEvent( QCloseEvent* e ) { Q_UNUSED( 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 calamares-3.2.41.1/src/calamares/DebugWindow.h000066400000000000000000000040211410275732300207770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_DEBUGWINDOW_H #define CALAMARES_DEBUGWINDOW_H #include "VariantModel.h" #include #include #include #include namespace Calamares { // From the .ui file namespace Ui { class DebugWindow; } class DebugWindow : public QWidget { Q_OBJECT public: explicit DebugWindow(); signals: void closed(); protected: void closeEvent( QCloseEvent* e ) override; private: Ui::DebugWindow* m_ui; QVariant m_globals; QVariant m_module; std::unique_ptr< VariantModel > m_globals_model; 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 calamares-3.2.41.1/src/calamares/DebugWindow.ui000066400000000000000000000111741410275732300211740ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later Calamares::DebugWindow 0 0 962 651 Form 0 GlobalStorage JobQueue Modules Type: none Interface: none 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 calamares-3.2.41.1/src/calamares/VariantModel.cpp000066400000000000000000000126651410275732300215160ustar00rootroot00000000000000/* === 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 "VariantModel.h" static void overallLength( const QVariant& item, quintptr& c, quintptr parent, VariantModel::IndexVector* skiplist ) { if ( skiplist ) { skiplist->append( parent ); } parent = c++; if ( item.canConvert< QVariantList >() ) { for ( const auto& subitem : item.toList() ) { overallLength( subitem, c, parent, skiplist ); } } else if ( item.canConvert< QVariantMap >() ) { for ( const auto& subitem : item.toMap() ) { overallLength( subitem, c, parent, skiplist ); } } } static quintptr findNth( const VariantModel::IndexVector& skiplist, quintptr value, int n ) { constexpr const quintptr invalid_index = static_cast< quintptr >( -1 ); if ( n < 0 ) { return invalid_index; } int index = static_cast< int >( value ); while ( ( n >= 0 ) && ( index < skiplist.count() ) ) { if ( skiplist[ index ] == value ) { if ( --n < 0 ) { // It's bigger than 0 return static_cast< quintptr >( index ); } } index++; } return invalid_index; } VariantModel::VariantModel( const QVariant* p ) : m_p( p ) { reload(); } VariantModel::~VariantModel() {} void VariantModel::reload() { constexpr const quintptr invalid_index = static_cast< quintptr >( -1 ); quintptr x = 0; m_rows.clear(); // Start over if ( m_rows.capacity() < 64 ) { m_rows.reserve( 64 ); // Start reasonably-sized } overallLength( *m_p, x, invalid_index, &m_rows ); } int VariantModel::columnCount( const QModelIndex& ) const { return 2; } int VariantModel::rowCount( const QModelIndex& index ) const { quintptr p = index.isValid() ? index.internalId() : 0; return m_rows.count( p ); } QModelIndex VariantModel::index( int row, int column, const QModelIndex& parent ) const { quintptr p = 0; if ( parent.isValid() ) { if ( inRange( parent ) ) { p = parent.internalId(); } } return createIndex( row, column, findNth( m_rows, p, row ) ); } static inline quintptr deref( const VariantModel::IndexVector& v, quintptr i ) { return v[ static_cast< int >( i ) ]; } QModelIndex VariantModel::parent( const QModelIndex& index ) const { if ( !index.isValid() || !inRange( index ) ) { return QModelIndex(); } quintptr p = deref( m_rows, index.internalId() ); if ( p == 0 ) { return QModelIndex(); } if ( !inRange( p ) ) { return QModelIndex(); } quintptr p_pid = deref( m_rows, p ); int row = 0; for ( int i = static_cast< int >( p_pid ); i < static_cast< int >( p ); ++i ) { if ( m_rows[ i ] == p_pid ) { row++; } } return createIndex( row, index.column(), p ); } QVariant VariantModel::data( const QModelIndex& index, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } if ( !index.isValid() ) { return QVariant(); } if ( ( index.column() < 0 ) || ( index.column() > 1 ) ) { return QVariant(); } if ( !inRange( index ) ) { return QVariant(); } const QVariant thing = underlying( parent( index ) ); if ( !thing.isValid() ) { return QVariant(); } if ( thing.canConvert< QVariantMap >() ) { QVariantMap the_map = thing.toMap(); const auto key = the_map.keys().at( index.row() ); if ( index.column() == 0 ) { return key; } else { return the_map[ key ]; } } else if ( thing.canConvert< QVariantList >() ) { if ( index.column() == 0 ) { return index.row(); } else { QVariantList the_list = thing.toList(); return the_list.at( index.row() ); } } else { if ( index.column() == 0 ) { return QVariant(); } else { return thing; } } } QVariant VariantModel::headerData( int section, Qt::Orientation orientation, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } if ( orientation == Qt::Horizontal ) { if ( section == 0 ) { return tr( "Key", "Column header for key/value" ); } else if ( section == 1 ) { return tr( "Value", "Column header for key/value" ); } else { return QVariant(); } } else { return QVariant(); } } const QVariant VariantModel::underlying( const QModelIndex& index ) const { if ( !index.isValid() ) { return *m_p; } const auto& thing = underlying( parent( index ) ); if ( thing.canConvert< QVariantMap >() ) { const auto& the_map = thing.toMap(); return the_map[ the_map.keys()[ index.row() ] ]; } else if ( thing.canConvert< QVariantList >() ) { return thing.toList()[ index.row() ]; } else { return thing; } } calamares-3.2.41.1/src/calamares/VariantModel.h000066400000000000000000000074611410275732300211610ustar00rootroot00000000000000/* === 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 VARIANTMODEL_H #define VARIANTMODEL_H #include #include #include /** @brief A model that operates directly on a QVariant * * A VariantModel operates directly on an underlying * QVariant, treating QVariantMap and QVariantList as * nodes with multiple children. In general, putting * a QVariantMap into a QVariant and passing that into * the model will get you a tree-like model of the * VariantMap's data structure. * * Take care of object lifetimes and that the underlying * QVariant does not change during use. If the QVariant * **does** change, call reload() to re-build the internal * representation of the tree. */ class VariantModel : public QAbstractItemModel { public: /** @brief Auxiliary data * * The nodes of the tree are enumerated into a vector * (of length equal to the number of nodes in the tree + 1) * which are used to do index and parent calculations. */ using IndexVector = QVector< quintptr >; /** @brief Constructor * * The QVariant's lifetime is **not** affected by the model, * so take care that the QVariant lives at least as long as * the model). Also, don't change the QVariant underneath the model. */ VariantModel( const QVariant* p ); ~VariantModel() override; /** @brief Re-build the internal tree * * Call this when the underlying variant is changed, which * might impact how the tree is laid out. */ void reload(); int columnCount( const QModelIndex& index ) const override; int rowCount( const QModelIndex& index ) const override; QModelIndex index( int row, int column, const QModelIndex& parent ) const override; QModelIndex parent( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role ) const override; private: const QVariant* const m_p; /** @brief Tree representation of the variant. * * At index 0 in the vector , we store -1 to indicate the root. * * Then we enumerate all the elements in the tree (by traversing * the variant and using QVariantMap and QVariantList as having * children, and everything else being a leaf node) and at the index * for a child, store the index of its parent. This means that direct * children of the root store a 0 in their indexes, children of the first * child of the root store a 1, and we can "pointer chase" from an index * through parents back to index 0. * * Because of this structure, the value stored at index i must be * less than i (except for index 0, which is special). This makes it * slightly easier to search for a given value *p*, because we can start * at index *p* (or even *p+1*). * * Given an index *i* into the vector corresponding to a child, we know the * parent, but can also count which row this child should have, by counting * *other* indexes before *i* with the same parent (and by the ordering * of values, we can start counting at index *parent-index*). * */ IndexVector m_rows; /// @brief Implementation of walking an index through the variant-tree const QVariant underlying( const QModelIndex& index ) const; /// @brief Helpers for range-checking inline bool inRange( quintptr p ) const { return p < static_cast< quintptr >( m_rows.count() ); } inline bool inRange( const QModelIndex& index ) const { return inRange( index.internalId() ); } }; #endif calamares-3.2.41.1/src/calamares/calamares-navigation.qml000066400000000000000000000052251410275732300232170ustar00rootroot00000000000000/* 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 import QtQuick 2.3 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 Rectangle { id: navigationBar; color: Branding.styleString( Branding.SidebarBackground ); height: 48; RowLayout { id: buttonBar anchors.fill: parent; Item { Layout.fillWidth: true; } Button { text: ViewManager.backLabel; icon.name: ViewManager.backIcon; enabled: ViewManager.backEnabled; visible: ViewManager.backAndNextVisible; onClicked: { ViewManager.back(); } } Button { text: ViewManager.nextLabel; icon.name: ViewManager.nextIcon; enabled: ViewManager.nextEnabled; 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.rightMargin: 2 * buttonBar.spacing text: ViewManager.quitLabel; icon.name: ViewManager.quitIcon; ToolTip.visible: hovered ToolTip.timeout: 5000 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(); } } } } calamares-3.2.41.1/src/calamares/calamares-sidebar.qml000066400000000000000000000055771410275732300225030ustar00rootroot00000000000000/* 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 import QtQuick 2.3 import QtQuick.Layouts 1.3 Rectangle { id: sideBar; color: Branding.styleString( Branding.SidebarBackground ); anchors.fill: parent; ColumnLayout { anchors.fill: parent; spacing: 0; Image { Layout.topMargin: 12; Layout.bottomMargin: 12; Layout.alignment: Qt.AlignHCenter | Qt.AlignTop id: logo; width: 80; height: width; // square source: "file:/" + Branding.imagePath(Branding.ProductLogo); sourceSize.width: width; sourceSize.height: height; } Repeater { model: ViewManager Rectangle { Layout.leftMargin: 6; Layout.rightMargin: 6; Layout.fillWidth: true; height: 35; radius: 6; color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarBackgroundSelected : Branding.SidebarBackground ); Text { anchors.verticalCenter: parent.verticalCenter; anchors.horizontalCenter: parent.horizontalCenter; color: Branding.styleString( index == ViewManager.currentStepIndex ? Branding.SidebarTextSelected : Branding.SidebarText ); text: display; } } } 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() } } } } calamares-3.2.41.1/src/calamares/calamares.qrc000066400000000000000000000004621410275732300210540ustar00rootroot00000000000000 calamares-sidebar.qml calamares-navigation.qml calamares-3.2.41.1/src/calamares/main.cpp000066400000000000000000000126611410275732300200510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CalamaresApplication.h" #include "Settings.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #ifndef WITH_KF5DBus #include "3rdparty/kdsingleapplicationguard/kdsingleapplicationguard.h" #endif #include #ifdef WITH_KF5DBus #include #endif #ifdef WITH_KF5Crash #include #endif #include #include #include /** @brief Gets debug-level from -D command-line-option * * If unset, use LOGERROR (corresponding to -D1), although * effectively -D2 is the lowest level you can set for * logging-to-the-console, and everything always gets * logged to the session file). */ static unsigned int debug_level( QCommandLineParser& parser, QCommandLineOption& levelOption ) { if ( !parser.isSet( levelOption ) ) { return Logger::LOGERROR; } bool ok = true; int l = parser.value( levelOption ).toInt( &ok ); if ( !ok || ( l < 0 ) ) { return Logger::LOGVERBOSE; } else { return static_cast< unsigned int >( l ); // l >= 0 } } /** @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" }, "Also look in current directory for configuration. Implies -D8." ); QCommandLineOption debugLevelOption( QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8).", "level" ); QCommandLineOption debugTxOption( QStringList { "T", "debug-translation" }, "Also look in the current directory for translation." ); QCommandLineOption configOption( QStringList { "c", "config" }, "Configuration directory to use, for testing purposes.", "config" ); QCommandLineOption xdgOption( QStringList { "X", "xdg-config" }, "Use XDG_{CONFIG,DATA}_DIRS as well." ); QCommandLineParser parser; parser.setApplicationDescription( "Distribution-independent installer framework" ); parser.addHelpOption(); parser.addVersionOption(); parser.addOption( debugOption ); parser.addOption( debugLevelOption ); parser.addOption( configOption ); parser.addOption( xdgOption ); parser.addOption( debugTxOption ); parser.process( a ); Logger::setupLogLevel( parser.isSet( debugOption ) ? Logger::LOGVERBOSE : debug_level( parser, debugLevelOption ) ); if ( parser.isSet( configOption ) ) { CalamaresUtils::setAppDataDir( QDir( parser.value( configOption ) ) ); } if ( parser.isSet( xdgOption ) ) { CalamaresUtils::setXdgDirs(); } CalamaresUtils::setAllowLocalTranslation( parser.isSet( debugOption ) || parser.isSet( debugTxOption ) ); return parser.isSet( debugOption ); } int main( int argc, char* argv[] ) { CalamaresApplication a( argc, argv ); KAboutData aboutData( "calamares", "Calamares", a.applicationVersion(), "The universal system installer", KAboutLicense::GPL_V3, QString(), QString(), "https://calamares.io", "https://github.com/calamares/calamares/issues" ); KAboutData::setApplicationData( aboutData ); a.setApplicationDisplayName( QString() ); // To avoid putting an extra "Calamares/" into the log-file #ifdef WITH_KF5Crash KCrash::initialize(); // KCrash::setCrashHandler(); KCrash::setDrKonqiEnabled( true ); KCrash::setFlags( KCrash::SaferDialog | KCrash::AlwaysDirectly ); // TODO: umount anything in /tmp/calamares-... as an emergency save function #endif 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(); qDebug() << "Calamares is already running, shutting down."; if ( instancelist.count() > 0 ) { qDebug() << "Other running Calamares instances:"; } for ( const auto& i : instancelist ) { qDebug() << " " << i.isValid() << i.pid() << i.arguments(); } 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(); } calamares-3.2.41.1/src/calamares/progresstree/000077500000000000000000000000001410275732300211375ustar00rootroot00000000000000calamares-3.2.41.1/src/calamares/progresstree/ProgressTreeDelegate.cpp000066400000000000000000000075001410275732300257240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ProgressTreeDelegate.h" #include "Branding.h" #include "CalamaresApplication.h" #include "CalamaresWindow.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include static constexpr int const item_margin = 8; static inline int item_fontsize() { return CalamaresUtils::defaultFontSize() + 4; } QSize ProgressTreeDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const { if ( !index.isValid() ) { return option.rect.size(); } QFont font = qApp->font(); font.setPointSize( item_fontsize() ); QFontMetrics fm( font ); int height = fm.height(); height += 2 * item_margin; return QSize( option.rect.width(), height ); } void ProgressTreeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QStyleOptionViewItem opt = option; painter->save(); initStyleOption( &opt, index ); opt.text.clear(); painter->setBrush( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ) ); painter->setPen( QColor( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarText ) ) ); paintViewStep( painter, opt, index ); painter->restore(); } void ProgressTreeDelegate::paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QRect textRect = option.rect.adjusted( item_margin, item_margin, -item_margin, -item_margin ); QFont font = qApp->font(); font.setPointSize( item_fontsize() ); font.setBold( false ); painter->setFont( font ); if ( index.row() == index.data( Calamares::ViewManager::ProgressTreeItemCurrentIndex ).toInt() ) { painter->setPen( Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextSelect ) ); QString textHighlight = Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarTextHighlight ); if ( textHighlight.isEmpty() ) { painter->setBrush( CalamaresApplication::instance()->mainWindow()->palette().window() ); } else { painter->setBrush( QColor( textHighlight ) ); } } // Draw the text at least once. If it doesn't fit, then shrink the font // being used by 1 pt on each iteration, up to a maximum of maximumShrink // times. On each loop, we'll have to blank out the rectangle again, so this // is an expensive (in terms of drawing operations) thing to do. // // (The loop uses <= because the counter is incremented at the start). static constexpr int const maximumShrink = 4; int shrinkSteps = 0; do { painter->fillRect( option.rect, painter->brush().color() ); shrinkSteps++; QRectF boundingBox; painter->drawText( textRect, Qt::AlignHCenter | Qt::AlignVCenter | Qt::TextSingleLine, index.data().toString(), &boundingBox ); // The extra check here is to avoid the changing-font-size if we're not going to use // it in the next iteration of the loop anyway. if ( ( shrinkSteps <= maximumShrink ) && ( boundingBox.width() > textRect.width() ) ) { font.setPointSize( item_fontsize() - shrinkSteps ); painter->setFont( font ); } else { break; // It fits } } while ( shrinkSteps <= maximumShrink ); } calamares-3.2.41.1/src/calamares/progresstree/ProgressTreeDelegate.h000066400000000000000000000020531410275732300253670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PROGRESSTREEDELEGATE_H #define PROGRESSTREEDELEGATE_H #include /** * @brief The ProgressTreeDelegate class customizes the look and feel of the * ProgressTreeView elements. * @see ProgressTreeView */ class ProgressTreeDelegate : public QStyledItemDelegate { public: using QStyledItemDelegate::QStyledItemDelegate; protected: QSize sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const override; void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override; private: void paintViewStep( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; }; #endif // PROGRESSTREEDELEGATE_H calamares-3.2.41.1/src/calamares/progresstree/ProgressTreeView.cpp000066400000000000000000000025441410275732300251270ustar00rootroot00000000000000/* === 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. * */ #include "ProgressTreeView.h" #include "ProgressTreeDelegate.h" #include "Branding.h" #include "ViewManager.h" ProgressTreeView::ProgressTreeView( QWidget* parent ) : QListView( parent ) { this->setObjectName( "sidebarMenuApp" ); setFrameShape( QFrame::NoFrame ); setContentsMargins( 0, 0, 0, 0 ); setSelectionMode( QAbstractItemView::NoSelection ); setDragDropMode( QAbstractItemView::NoDragDrop ); setAcceptDrops( false ); setItemDelegate( new ProgressTreeDelegate( this ) ); QPalette plt = palette(); plt.setColor( QPalette::Base, Calamares::Branding::instance()->styleString( Calamares::Branding::SidebarBackground ) ); setPalette( plt ); } ProgressTreeView::~ProgressTreeView() {} void ProgressTreeView::setModel( QAbstractItemModel* model ) { if ( ProgressTreeView::model() ) { return; } QListView::setModel( model ); connect( Calamares::ViewManager::instance(), &Calamares::ViewManager::currentStepChanged, this, [this]() { viewport()->update(); }, Qt::UniqueConnection ); } calamares-3.2.41.1/src/calamares/progresstree/ProgressTreeView.h000066400000000000000000000015461410275732300245750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PROGRESSTREEVIEW_H #define PROGRESSTREEVIEW_H #include /** * @brief The ProgressTreeView class is a modified QTreeView which displays the * available view steps and the user's progress through them. */ class ProgressTreeView : public QListView { Q_OBJECT public: explicit ProgressTreeView( QWidget* parent = nullptr ); ~ProgressTreeView() override; /** * @brief setModel assigns a model to this view. */ void setModel( QAbstractItemModel* model ) override; }; #endif // PROGRESSTREEVIEW_H calamares-3.2.41.1/src/calamares/test_conf.cpp000066400000000000000000000046371410275732300211150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /** * This is a test-application that just checks the YAML config-file * shipped with each module for correctness -- well, for parseability. */ #include "utils/Yaml.h" #include #include #include #include #include using std::cerr; static const char usage[] = "Usage: test_conf [-v] [-b] ...\n"; int main( int argc, char** argv ) { bool verbose = false; bool bytes = false; int opt; while ( ( opt = getopt( argc, argv, "vb" ) ) != -1 ) { switch ( opt ) { case 'v': verbose = true; break; case 'b': bytes = true; break; default: /* '?' */ cerr << usage; return 1; } } if ( optind >= argc ) { cerr << usage; return 1; } const char* filename = argv[ optind ]; try { YAML::Node doc; if ( bytes ) { QFile f( filename ); if ( f.open( QFile::ReadOnly | QFile::Text ) ) { doc = YAML::Load( f.readAll().constData() ); } } else { doc = YAML::LoadFile( filename ); } if ( doc.IsNull() ) { // Special case: empty config files are valid, // but aren't a map. For the example configs, // this is still an error. cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: empty YAML\n"; return 1; } if ( !doc.IsMap() ) { cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: not-a-YAML-map (type=" << doc.Type() << ")\n"; return 1; } if ( verbose ) { cerr << "Keys:\n"; for ( auto i = doc.begin(); i != doc.end(); ++i ) { cerr << i->first.as< std::string >() << '\n'; } } } catch ( YAML::Exception& e ) { cerr << "WARNING:" << filename << '\n'; cerr << "WARNING: YAML parser error " << e.what() << '\n'; return 1; } return 0; } calamares-3.2.41.1/src/calamares/testmain.cpp000066400000000000000000000417361410275732300207560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /* * This executable loads and runs a Calamares Python module * within a C++ application, in order to test the different * bindings. */ #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 #include #include #include #include #include #include #include struct ModuleConfig { QString moduleName() const { return m_module; } QString configFile() const { return m_jobConfig; } QString language() const { return m_language; } QString globalConfigFile() const { return m_globalConfig; } QString m_module; QString m_jobConfig; QString m_globalConfig; QString m_language; QString m_branding; bool m_ui; bool m_pythonInjection; }; static ModuleConfig handle_args( QCoreApplication& a ) { QCommandLineOption debugLevelOption( QStringLiteral( "D" ), "Verbose output for debugging purposes (0-8), ignored.", "level" ); QCommandLineOption globalOption( QStringList() << 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" ), QStringLiteral( "Language (global)" ), "languagecode" ); QCommandLineOption brandOption( QStringList() << 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 slideshowOption( QStringList() << QStringLiteral( "s" ) << QStringLiteral( "slideshow" ), QStringLiteral( "Run slideshow module" ) ); QCommandLineParser parser; parser.setApplicationDescription( "Calamares module tester" ); parser.addHelpOption(); parser.addVersionOption(); parser.addOption( debugLevelOption ); parser.addOption( globalOption ); parser.addOption( jobOption ); parser.addOption( langOption ); parser.addOption( brandOption ); parser.addOption( uiOption ); parser.addOption( slideshowOption ); #ifdef WITH_PYTHON QCommandLineOption pythonOption( QStringList() << 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() && !parser.isSet( slideshowOption ) ) { cError() << "Missing path.\n"; parser.showHelp(); } else if ( args.size() > 2 ) { cError() << "More than one path.\n"; parser.showHelp(); } else { QString jobSettings( parser.value( jobOption ) ); if ( jobSettings.isEmpty() && ( args.size() == 2 ) ) { jobSettings = args.at( 1 ); } 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( 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 "x@x". QVariantMap m; m.insert( "name", "x" ); Calamares::Module::initFrom( Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ), "x" ); } 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(); if ( moduleName == "-" ) { return new ExecViewModule; } QFileInfo fi; bool ok = false; QVariantMap descriptor; for ( const QString& prefix : QStringList { "./", "src/modules/", "modules/" } ) { // Could be a complete path, eg. src/modules/dummycpp/module.desc fi = QFileInfo( prefix + moduleName ); if ( fi.exists() && fi.isFile() ) { descriptor = CalamaresUtils::loadYaml( fi, &ok ); } if ( ok ) { break; } // Could be a path without module.desc fi = QFileInfo( prefix + moduleName ); if ( fi.exists() && fi.isDir() ) { fi = QFileInfo( prefix + moduleName + "/module.desc" ); if ( fi.exists() && fi.isFile() ) { descriptor = CalamaresUtils::loadYaml( fi, &ok ); } if ( ok ) { break; } } } if ( !ok ) { cWarning() << "No suitable module descriptor found."; return nullptr; } QString name = descriptor.value( "name" ).toString(); if ( name.isEmpty() ) { cWarning() << "No name found in module descriptor" << fi.absoluteFilePath(); return nullptr; } QString moduleDirectory = fi.absolutePath(); QString configFile( moduleConfig.configFile().isEmpty() ? moduleDirectory + '/' + name + ".conf" : moduleConfig.configFile() ); cDebug() << Logger::SubEntry << "Module" << moduleName << "job-configuration:" << configFile; Calamares::Module* module = Calamares::moduleFromDescriptor( Calamares::ModuleSystem::Descriptor::fromDescriptorData( descriptor ), 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 * a UI-enabled application if it does. * * @p argc must be a reference (to main's argc) because the QCoreApplication * constructors take a reference as well, and that would otherwise be a * reference to a temporary. */ QCoreApplication* createApplication( int& argc, char* argv[] ) { for ( int i = 1; i < argc; ++i ) { if ( is_slideshow_option( argv[ i ] ) || is_ui_option( argv[ i ] ) ) { auto* aw = new QApplication( argc, argv ); aw->setQuitOnLastWindowClosed( true ); return aw; } } 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[] ) { QCoreApplication* aw = createApplication( argc, argv ); Logger::setupLogLevel( Logger::LOGVERBOSE ); ModuleConfig module = handle_args( *aw ); if ( module.moduleName().isEmpty() ) { return 1; } std::unique_ptr< Calamares::Settings > settings_p( Calamares::Settings::init( QString() ) ); std::unique_ptr< Calamares::JobQueue > jobqueue_p( new Calamares::JobQueue( nullptr ) ); QMainWindow* mw = nullptr; auto* gs = jobqueue_p->globalStorage(); if ( !module.globalConfigFile().isEmpty() ) { gs->loadYaml( module.globalConfigFile() ); } if ( !module.language().isEmpty() ) { QVariantMap vm; vm.insert( "LANG", module.language() ); 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 ) { cError() << "Could not load module" << module.moduleName(); return 1; } 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 ); auto* modulemanager = new Calamares::ModuleManager( QStringList(), nullptr ); (void)Calamares::ViewManager::instance( mw ); modulemanager->addModule( m ); } if ( !m->isLoaded() ) { m->loadSelf(); } if ( !m->isLoaded() ) { cError() << "Module" << module.moduleName() << "could not be loaded."; return 1; } if ( mw ) { auto* vm = Calamares::ViewManager::instance(); vm->onInitComplete(); QWidget* w = vm->currentStep()->widget(); w->setParent( mw ); mw->setCentralWidget( w ); w->show(); mw->show(); return aw->exec(); } using TR = Logger::DebugRow< const char*, const QString >; cDebug() << "Module metadata" << TR( "name", m->name() ) << TR( "type", m->typeString() ) << TR( "interface", m->interfaceString() ); Calamares::JobList jobList = m->jobs(); unsigned int failure_count = 0; unsigned int count = 1; for ( const auto& p : jobList ) { cDebug() << "Job #" << count << "name" << p->prettyName(); Calamares::JobResult r = p->exec(); if ( !r ) { cError() << "Job #" << count << "failed" << TR( "summary", r.message() ) << TR( "details", r.details() ); if ( r.errorCode() > 0 ) { ++failure_count; } } ++count; } if ( aw ) { delete aw; } return failure_count ? 1 : 0; } calamares-3.2.41.1/src/libcalamares/000077500000000000000000000000001410275732300171025ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/CMakeLists.txt000066400000000000000000000210211410275732300216360ustar00rootroot00000000000000# === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2020 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # # # 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}/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 "" ) set( libSources CppJob.cpp GlobalStorage.cpp Job.cpp JobExample.cpp JobQueue.cpp ProcessJob.cpp Settings.cpp # GeoIP services geoip/Interface.cpp geoip/GeoIPFixed.cpp geoip/GeoIPJSON.cpp geoip/Handler.cpp # Locale-data service locale/Global.cpp locale/Label.cpp locale/LabelModel.cpp locale/Lookup.cpp locale/TimeZone.cpp locale/TranslatableConfiguration.cpp locale/TranslatableString.cpp # Modules modulesystem/Config.cpp modulesystem/Descriptor.cpp modulesystem/InstanceKey.cpp modulesystem/Module.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 # Utility service utils/CalamaresUtilsSystem.cpp utils/CommandList.cpp utils/Dirs.cpp utils/Entropy.cpp utils/Logger.cpp utils/Permissions.cpp utils/PluginFactory.cpp utils/Retranslator.cpp utils/String.cpp utils/UMask.cpp utils/Variant.cpp utils/Yaml.cpp ) ### 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 # # if( WITH_PYTHON ) list( APPEND libSources PythonHelper.cpp PythonJob.cpp PythonJobApi.cpp ) include_directories(${PYTHON_INCLUDE_DIRS}) link_directories(${PYTHON_LIBRARIES}) include_directories(${Boost_INCLUDE_DIRS}) link_directories(${Boost_LIBRARY_DIRS}) list( APPEND OPTIONAL_PRIVATE_LIBRARIES ${PYTHON_LIBRARIES} ${Boost_LIBRARIES} ) endif() ### OPTIONAL GeoIP XML support # # find_package(Qt5 COMPONENTS Xml) if( Qt5Xml_FOUND ) list( APPEND libSources geoip/GeoIPXML.cpp ) list( APPEND OPTIONAL_PUBLIC_LIBRARIES Qt5::Network Qt5::Xml ) endif() ### OPTIONAL KPMcore support # # include( KPMcoreHelper ) if ( KPMcore_FOUND ) find_package( Qt5 REQUIRED DBus ) # Needed for KPMCore find_package( KF5 REQUIRED I18n WidgetsAddons ) # Needed for KPMCore foreach ( d ${KPMcore_API_DEFINITIONS} ) add_definitions( -D${d} ) endforeach() include_directories( ${KPMCORE_INCLUDE_DIR} ) list( APPEND libSources partition/FileSystem.cpp partition/KPMManager.cpp partition/PartitionIterator.cpp partition/PartitionQuery.cpp ) list( APPEND OPTIONAL_PRIVATE_LIBRARIES kpmcore ) endif() ### LIBRARY # # 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 ) target_link_libraries( calamares LINK_PRIVATE ${OPTIONAL_PRIVATE_LIBRARIES} LINK_PUBLIC yamlcpp::yamlcpp Qt5::Core KF5::CoreAddons ${OPTIONAL_PUBLIC_LIBRARIES} ) add_library(Calamares::calamares ALIAS calamares) ### Installation # # install( TARGETS calamares EXPORT Calamares RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) # Make symlink lib/calamares/libcalamares.so to lib/libcalamares.so.VERSION so # lib/calamares can be used as module path for the Python interpreter. install( CODE " file( MAKE_DIRECTORY \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_LIBDIR}/calamares\" ) execute_process( COMMAND \"${CMAKE_COMMAND}\" -E create_symlink ../libcalamares.so.${CALAMARES_VERSION_SHORT} libcalamares.so WORKING_DIRECTORY \"\$ENV{DESTDIR}/${CMAKE_INSTALL_FULL_LIBDIR}/calamares\" ) ") # Install header files file( GLOB rootHeaders "*.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() ### TESTING # # calamares_add_test( libcalamarestest SOURCES Tests.cpp ) calamares_add_test( libcalamaresgeoiptest SOURCES geoip/GeoIPTests.cpp ${geoip_src} ) 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( libcalamaresnetworktest SOURCES network/Tests.cpp ) calamares_add_test( libcalamarespackagestest SOURCES packages/Tests.cpp ) 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 ) 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() calamares-3.2.41.1/src/libcalamares/CalamaresConfig.h.in000066400000000000000000000021511410275732300226750ustar00rootroot00000000000000/* === 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 #define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" #define CMAKE_INSTALL_FULL_LIBEXECDIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}" #define CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}" #define CMAKE_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}" #define CMAKE_INSTALL_FULL_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}/calamares" #define CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}" /* * 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 calamares-3.2.41.1/src/libcalamares/CalamaresVersion.h.in000066400000000000000000000015171410275732300231220ustar00rootroot00000000000000// 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_SHORT}" #cmakedefine CALAMARES_VERSION_SHORT "${CALAMARES_VERSION_SHORT}" #cmakedefine CALAMARES_VERSION_MAJOR "${CALAMARES_VERSION_MAJOR}" #cmakedefine CALAMARES_VERSION_MINOR "${CALAMARES_VERSION_MINOR}" #cmakedefine CALAMARES_VERSION_PATCH "${CALAMARES_VERSION_PATCH}" #cmakedefine CALAMARES_VERSION_RC "${CALAMARES_VERSION_RC}" #cmakedefine CALAMARES_TRANSLATION_LANGUAGES "${CALAMARES_TRANSLATION_LANGUAGES}" #endif // CALAMARES_VERSION_H calamares-3.2.41.1/src/libcalamares/CalamaresVersionX.h.in000066400000000000000000000007211410275732300232460ustar00rootroot00000000000000// 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 calamares-3.2.41.1/src/libcalamares/CppJob.cpp000066400000000000000000000013231410275732300207620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CppJob.h" namespace Calamares { CppJob::CppJob( QObject* parent ) : Job( parent ) { } CppJob::~CppJob() {} void CppJob::setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ) { m_instanceKey = instanceKey; } void CppJob::setConfigurationMap( const QVariantMap& configurationMap ) { Q_UNUSED( configurationMap ) } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/CppJob.h000066400000000000000000000021411410275732300204260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CALAMARES_CPPJOB_H #define CALAMARES_CPPJOB_H #include "DllMacro.h" #include "Job.h" #include "modulesystem/InstanceKey.h" #include #include namespace Calamares { class DLLEXPORT CppJob : public Job { Q_OBJECT public: explicit CppJob( QObject* parent = nullptr ); ~CppJob() override; void setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ); Calamares::ModuleSystem::InstanceKey moduleInstanceKey() const { return m_instanceKey; } virtual void setConfigurationMap( const QVariantMap& configurationMap ); protected: Calamares::ModuleSystem::InstanceKey m_instanceKey; }; } // namespace Calamares #endif // CALAMARES_CPPJOB_H calamares-3.2.41.1/src/libcalamares/DllMacro.h000066400000000000000000000030141410275732300207460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 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. * */ #ifndef DLLMACRO_H #define DLLMACRO_H #include /* * Mark symbols exported from Calamares non-GUI library with DLLEXPORT. * These are the public API of libcalamares. */ #ifndef DLLEXPORT #if defined( DLLEXPORT_PRO ) #define DLLEXPORT Q_DECL_EXPORT #else #define DLLEXPORT Q_DECL_IMPORT #endif #endif /* * Mark symbols exported from Calamares GUI library with DLLEXPORT. * These are the public API of libcalamaresui. */ #ifndef UIDLLEXPORT #if defined( UIDLLEXPORT_PRO ) #define UIDLLEXPORT Q_DECL_EXPORT #else #define UIDLLEXPORT Q_DECL_IMPORT #endif #endif /* * Mark symbols exported from Calamares C++ plugins with PLUGINDLLEXPORT. * These are the public API of the libraries (generally, the plugin * entry point) */ #ifndef PLUGINDLLEXPORT #if defined( PLUGINDLLEXPORT_PRO ) #define PLUGINDLLEXPORT Q_DECL_EXPORT #else #define PLUGINDLLEXPORT Q_DECL_IMPORT #endif #endif /* * For functions that should be static in production but also need to * be tested, use STATICTEST as linkage specifier. When built as part * of a test, the function will be given normal linkage. */ #ifndef STATICTEST #if defined( BUILD_AS_TEST ) #define STATICTEST #else #define STATICTEST static #endif #endif #endif calamares-3.2.41.1/src/libcalamares/GlobalStorage.cpp000066400000000000000000000074421410275732300223420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #include "GlobalStorage.h" #include "utils/Logger.h" #include "utils/Units.h" #include "utils/Yaml.h" #include #include #include using namespace CalamaresUtils::Units; namespace Calamares { 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 ) { } bool GlobalStorage::contains( const QString& key ) const { ReadLock l( this ); return m.contains( key ); } int GlobalStorage::count() const { ReadLock l( this ); return m.count(); } void GlobalStorage::insert( const QString& key, const QVariant& value ) { WriteLock l( this ); m.insert( key, value ); } QStringList GlobalStorage::keys() const { ReadLock l( this ); return m.keys(); } int GlobalStorage::remove( const QString& key ) { WriteLock l( this ); int nItems = m.remove( key ); return nItems; } 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() << Logger::SubEntry << it.key() << '\t' << it.value(); } } bool GlobalStorage::saveJson( const QString& filename ) const { ReadLock l( this ); QFile f( filename ); if ( !f.open( QFile::WriteOnly ) ) { return false; } f.write( QJsonDocument::fromVariant( m ).toJson() ); f.close(); return true; } bool GlobalStorage::loadJson( const QString& filename ) { QFile f( filename ); if ( !f.open( QFile::ReadOnly ) ) { return false; } QJsonParseError e; QJsonDocument d = QJsonDocument::fromJson( f.read( 1_MiB ), &e ); if ( d.isNull() ) { cWarning() << filename << e.errorString(); } else if ( !d.isObject() ) { cWarning() << filename << "Not suitable JSON."; } 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 ) { m.insert( i.key(), *i ); } return true; } return false; } bool GlobalStorage::saveYaml( const QString& filename ) const { ReadLock l( this ); return CalamaresUtils::saveYaml( filename, m ); } bool GlobalStorage::loadYaml( const QString& filename ) { bool ok = false; auto map = CalamaresUtils::loadYaml( filename, &ok ); if ( ok ) { 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 false; } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/GlobalStorage.h000066400000000000000000000131431410275732300220020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #ifndef CALAMARES_GLOBALSTORAGE_H #define CALAMARES_GLOBALSTORAGE_H #include #include #include #include namespace Calamares { /** @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: /** @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 ); /** @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 ); /** @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 ); /** @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 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 storage is not cleared first: existing * keys will remain; keys that also occur in the JSON file are overwritten. */ bool loadJson( const QString& filename ); /** @brief write as YAML to the given filename * * See also save(), above. */ bool saveYaml( const QString& filename ) const; /** @brief reads settings from the given filename * * See also load(), above. */ bool loadYaml( const QString& filename ); /** @brief Make a complete copy of the data * * Provides a snapshot of the data at a given time. */ 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 #endif // CALAMARES_GLOBALSTORAGE_H calamares-3.2.41.1/src/libcalamares/Job.cpp000066400000000000000000000032241410275732300203210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Job.h" namespace Calamares { JobResult::JobResult( JobResult&& rhs ) : m_message( std::move( rhs.m_message ) ) , m_details( std::move( rhs.m_details ) ) , m_number( rhs.m_number ) { } JobResult::operator bool() const { return m_number == 0; } QString JobResult::message() const { return m_message; } void JobResult::setMessage( const QString& message ) { m_message = message; } QString JobResult::details() const { return m_details; } void JobResult::setDetails( const QString& details ) { m_details = details; } JobResult JobResult::ok() { return JobResult( QString(), QString(), NoError ); } JobResult JobResult::error( const QString& message, const QString& details ) { return JobResult( message, details, GenericError ); } JobResult JobResult::internalError( const QString& message, const QString& details, int number ) { return JobResult( message, details, number ? number : GenericError ); } JobResult::JobResult( const QString& message, const QString& details, int number ) : m_message( message ) , m_details( details ) , m_number( number ) { } Job::Job( QObject* parent ) : QObject( parent ) { } Job::~Job() {} int Job::getJobWeight() const { return 1; } QString Job::prettyDescription() const { return QString(); } QString Job::prettyStatusMessage() const { return QString(); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/Job.h000066400000000000000000000106401410275732300177660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef CALAMARES_JOB_H #define CALAMARES_JOB_H #include "DllMacro.h" #include #include #include namespace Calamares { class DLLEXPORT JobResult { public: /** @brief Distinguish classes of errors * * All "ok result" have errorCode 0 (NoError). * Errors returned from job execution have values < 0. * Errors before job execution, or not returned by the job execution * itself, have values > 0. */ enum { NoError = 0, GenericError = -1, PythonUncaughtException = 1, InvalidConfiguration = 2, MissingRequirements = 3, }; // Can't copy, but you can keep a temporary JobResult( const JobResult& rhs ) = delete; JobResult( JobResult&& rhs ); virtual ~JobResult() {} /** @brief Is this JobResult a success? * * Equivalent to errorCode() == 0, might be named isValid(). */ virtual operator bool() const; virtual QString message() const; virtual void setMessage( const QString& message ); virtual QString details() const; virtual void setDetails( const QString& details ); int errorCode() const { return m_number; } /// @brief an "ok status" result static JobResult ok(); /** @brief an "error" result resulting from the execution of the job * * The error code is set to GenericError. */ static JobResult error( const QString& message, const QString& details = QString() ); /** @brief an "internal error" meaning the job itself has a problem (usually for python) * * Pass in a suitable error code; using 0 (which would normally mean "ok") instead * gives you a GenericError code. */ static JobResult internalError( const QString&, const QString& details, int errorCode ); protected: explicit JobResult( const QString& message, const QString& details, int errorCode ); private: QString m_message; QString m_details; int m_number; }; class DLLEXPORT Job : public QObject { Q_OBJECT public: explicit Job( QObject* parent = nullptr ); ~Job() override; /** @brief The job's (relative) weight. * * 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 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; /** @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 * * This is called from the JobQueue when progress is made, and should * return a not-too-long description of the job's status. This * is made visible in the progress bar of the execution view step. */ virtual QString prettyStatusMessage() const; virtual JobResult exec() = 0; bool isEmergency() const { return m_emergency; } void setEmergency( bool e ) { m_emergency = e; } signals: void progress( qreal percent ); private: bool m_emergency = false; }; using job_ptr = QSharedPointer< Job >; using JobList = QList< job_ptr >; } // namespace Calamares #endif // CALAMARES_JOB_H calamares-3.2.41.1/src/libcalamares/JobExample.cpp000066400000000000000000000012431410275732300216340ustar00rootroot00000000000000/* === 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 "JobExample.h" namespace Calamares { QString NamedJob::prettyName() const { return tr( "Example job (%1)" ).arg( m_name ); } JobResult GoodJob::exec() { return JobResult::ok(); } JobResult FailJob::exec() { return JobResult::error( tr( "Job failed (%1)" ).arg( m_name ), tr( "Programmed job failure was explicitly requested." ) ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/JobExample.h000066400000000000000000000025771410275732300213140ustar00rootroot00000000000000/* === 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 CALAMARES_JOB_EXAMPLE_H #define CALAMARES_JOB_EXAMPLE_H #include "Job.h" namespace Calamares { /** @brief A Job with a name * * This includes a default implementation of prettyName(), * but is only used as a base for FailJob and GoodJob, * which are support / bogus classes. */ class DLLEXPORT NamedJob : public Job { public: explicit NamedJob( const QString& name, QObject* parent = nullptr ) : Job( parent ) , m_name( name ) { } virtual QString prettyName() const override; protected: const QString m_name; }; /// @brief Job does nothing, always succeeds class DLLEXPORT GoodJob : public NamedJob { public: explicit GoodJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) { } virtual JobResult exec() override; }; /// @brief Job does nothing, always fails class DLLEXPORT FailJob : public NamedJob { public: explicit FailJob( const QString& name, QObject* parent = nullptr ) : NamedJob( name, parent ) { } virtual JobResult exec() override; }; } // namespace Calamares #endif // CALAMARES_JOB_EXAMPLE_H calamares-3.2.41.1/src/libcalamares/JobQueue.cpp000066400000000000000000000202361410275732300213300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "JobQueue.h" #include "CalamaresConfig.h" #include "GlobalStorage.h" #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 { public: JobThread( JobQueue* queue ) : QThread( queue ) , m_queue( queue ) , m_jobIndex( 0 ) { } ~JobThread() override; void finalize() { 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 ) { m_overallQueueWeight = 1.0; } cDebug() << "There are" << m_runningJobs->count() << "jobs, total weight" << m_overallQueueWeight; int c = 0; for ( const auto& j : *m_runningJobs ) { 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 { QMutexLocker rlock( &m_runMutex ); bool failureEncountered = false; QString message; ///< Filled in with errors QString details; m_jobIndex = 0; for ( const auto& jobitem : *m_runningJobs ) { if ( failureEncountered && !jobitem.job->isEmergency() ) { cDebug() << "Skipping non-emergency job" << jobitem.job->prettyName(); } else { cDebug() << "Starting" << ( failureEncountered ? "EMERGENCY JOB" : "job" ) << jobitem.job->prettyName() << '(' << ( m_jobIndex + 1 ) << '/' << m_runningJobs->count() << ')'; 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* } m_jobIndex++; } if ( failureEncountered ) { QMetaObject::invokeMethod( m_queue, "failed", Qt::QueuedConnection, Q_ARG( QString, message ), Q_ARG( QString, details ) ); } else { emitProgress( 1.0 ); } 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: /* 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 { percentage = qBound( 0.0, percentage, 1.0 ); QString message; qreal progress = 0.0; if ( m_jobIndex < m_runningJobs->count() ) { 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() ) { message = jobitem.job->prettyDescription(); if ( message.isEmpty() ) { message = jobitem.job->prettyName(); } } } else { progress = 1.0; message = tr( "Done" ); } QMetaObject::invokeMethod( m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, progress ), Q_ARG( QString, message ) ); } mutable QMutex m_runMutex; mutable QMutex m_enqueMutex; 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() {} JobQueue* JobQueue::s_instance = nullptr; JobQueue* JobQueue::instance() { if ( !s_instance ) { cWarning() << "Getting nullptr JobQueue instance."; } return s_instance; } JobQueue::JobQueue( QObject* parent ) : QObject( parent ) , m_thread( new JobThread( this ) ) , m_storage( new GlobalStorage( this ) ) { Q_ASSERT( !s_instance ); s_instance = this; } JobQueue::~JobQueue() { if ( m_thread->isRunning() ) { m_thread->terminate(); if ( !m_thread->wait( 300 ) ) { cError() << "Could not terminate job thread (expect a crash now)."; } delete m_thread; } delete m_storage; s_instance = nullptr; } void JobQueue::start() { Q_ASSERT( !m_thread->isRunning() ); m_thread->finalize(); m_finished = false; m_thread->start(); } void JobQueue::enqueue( int moduleWeight, const JobList& jobs ) { Q_ASSERT( !m_thread->isRunning() ); m_thread->enqueue( moduleWeight, jobs ); emit queueChanged( m_thread->queuedJobs() ); } void JobQueue::finish() { m_finished = true; emit finished(); emit queueChanged( m_thread->queuedJobs() ); } GlobalStorage* JobQueue::globalStorage() const { return m_storage; } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/JobQueue.h000066400000000000000000000063051410275732300207760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_JOBQUEUE_H #define CALAMARES_JOBQUEUE_H #include "DllMacro.h" #include "Job.h" #include namespace Calamares { class GlobalStorage; class JobThread; class DLLEXPORT JobQueue : public QObject { Q_OBJECT public: explicit JobQueue( QObject* parent = nullptr ); ~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; /** @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; } signals: /** @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; JobThread* m_thread; GlobalStorage* m_storage; bool m_finished = true; ///< Initially, not running }; } // namespace Calamares #endif // CALAMARES_JOBQUEUE_H calamares-3.2.41.1/src/libcalamares/ProcessJob.cpp000066400000000000000000000035521410275732300216640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "ProcessJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include namespace Calamares { ProcessJob::ProcessJob( const QString& command, const QString& workingPath, bool runInChroot, std::chrono::seconds secondsTimeout, QObject* parent ) : Job( parent ) , m_command( command ) , m_workingPath( workingPath ) , m_runInChroot( runInChroot ) , m_timeoutSec( secondsTimeout ) { } ProcessJob::~ProcessJob() {} QString ProcessJob::prettyName() const { return ( m_runInChroot ? tr( "Run command '%1' in target system." ) : tr( " Run command '%1'." ) ).arg( m_command ); } QString ProcessJob::prettyStatusMessage() const { return tr( "Running command %1 %2" ).arg( m_command ).arg( m_runInChroot ? "in chroot." : " ." ); } JobResult ProcessJob::exec() { using CalamaresUtils::System; if ( m_runInChroot ) return CalamaresUtils::System::instance() ->targetEnvCommand( { m_command }, m_workingPath, QString(), m_timeoutSec ) .explainProcess( m_command, m_timeoutSec ); else return System::runCommand( System::RunLocation::RunInHost, { "/bin/sh", "-c", m_command }, m_workingPath, QString(), m_timeoutSec ) .explainProcess( m_command, m_timeoutSec ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/ProcessJob.h000066400000000000000000000021651410275732300213300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 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. * */ #ifndef CALAMARES_PROCESSJOB_H #define CALAMARES_PROCESSJOB_H #include "Job.h" #include namespace Calamares { class ProcessJob : public Job { Q_OBJECT public: explicit ProcessJob( const QString& command, const QString& workingPath, bool runInChroot = false, std::chrono::seconds secondsTimeout = std::chrono::seconds( 30 ), QObject* parent = nullptr ); ~ProcessJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; JobResult exec() override; private: QString m_command; QString m_workingPath; bool m_runInChroot; std::chrono::seconds m_timeoutSec; }; } // namespace Calamares #endif // CALAMARES_PROCESSJOB_H calamares-3.2.41.1/src/libcalamares/PythonHelper.cpp000066400000000000000000000265441410275732300222420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonHelper.h" #include "GlobalStorage.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include #include namespace bp = boost::python; namespace CalamaresPython { boost::python::object variantToPyObject( const QVariant& variant ) { switch ( variant.type() ) { case QVariant::Map: return variantMapToPyDict( variant.toMap() ); case QVariant::Hash: return variantHashToPyDict( variant.toHash() ); case QVariant::List: case QVariant::StringList: return variantListToPyList( variant.toList() ); 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(); } } QVariant variantFromPyObject( const boost::python::object& pyObject ) { std::string pyType = bp::extract< std::string >( pyObject.attr( "__class__" ).attr( "__name__" ) ); if ( pyType == "dict" ) { return variantMapFromPyDict( bp::extract< bp::dict >( pyObject ) ); } else if ( pyType == "list" ) { return variantListFromPyList( bp::extract< bp::list >( pyObject ) ); } else if ( pyType == "int" ) { return QVariant( bp::extract< int >( pyObject ) ); } else if ( pyType == "float" ) { return QVariant( bp::extract< double >( pyObject ) ); } else if ( pyType == "str" ) { return QVariant( QString::fromStdString( bp::extract< std::string >( pyObject ) ) ); } else if ( pyType == "bool" ) { return QVariant( bp::extract< bool >( pyObject ) ); } else { return QVariant(); } } boost::python::list variantListToPyList( const QVariantList& variantList ) { bp::list pyList; for ( const QVariant& variant : variantList ) { pyList.append( variantToPyObject( variant ) ); } return pyList; } QVariantList variantListFromPyList( const boost::python::list& pyList ) { QVariantList list; for ( int i = 0; i < bp::len( pyList ); ++i ) { list.append( variantFromPyObject( pyList[ i ] ) ); } return list; } boost::python::dict variantMapToPyDict( const QVariantMap& variantMap ) { bp::dict pyDict; for ( auto it = variantMap.constBegin(); it != variantMap.constEnd(); ++it ) { pyDict[ it.key().toStdString() ] = variantToPyObject( it.value() ); } return pyDict; } QVariantMap variantMapFromPyDict( const boost::python::dict& pyDict ) { QVariantMap map; bp::list keys = pyDict.keys(); for ( int i = 0; i < bp::len( keys ); ++i ) { bp::extract< std::string > extracted_key( keys[ i ] ); if ( !extracted_key.check() ) { cDebug() << "Key invalid, map might be incomplete."; continue; } std::string key = extracted_key; bp::object obj = pyDict[ key ]; map.insert( QString::fromStdString( key ), variantFromPyObject( obj ) ); } return map; } boost::python::dict variantHashToPyDict( const QVariantHash& variantHash ) { bp::dict pyDict; for ( auto it = variantHash.constBegin(); it != variantHash.constEnd(); ++it ) { pyDict[ it.key().toStdString() ] = variantToPyObject( it.value() ); } return pyDict; } QVariantHash variantHashFromPyDict( const boost::python::dict& pyDict ) { QVariantHash hash; bp::list keys = pyDict.keys(); for ( int i = 0; i < bp::len( keys ); ++i ) { bp::extract< std::string > extracted_key( keys[ i ] ); if ( !extracted_key.check() ) { cDebug() << "Key invalid, map might be incomplete."; continue; } std::string key = extracted_key; bp::object obj = pyDict[ key ]; hash.insert( QString::fromStdString( key ), variantFromPyObject( obj ) ); } return hash; } static inline void add_if_lib_exists( const QDir& dir, const char* name, QStringList& list ) { if ( !( dir.exists() && dir.isReadable() ) ) { return; } QFileInfo fi( dir.absoluteFilePath( name ) ); if ( fi.exists() && fi.isReadable() ) { list.append( fi.dir().absolutePath() ); } } Helper::Helper() : QObject( nullptr ) { // Let's make extra sure we only call Py_Initialize once if ( !Py_IsInitialized() ) { Py_Initialize(); } m_mainModule = bp::import( "__main__" ); m_mainNamespace = m_mainModule.attr( "__dict__" ); // If we're running from the build dir add_if_lib_exists( QDir::current(), "libcalamares.so", m_pythonPaths ); QDir calaPythonPath( CalamaresUtils::systemLibDir().absolutePath() + QDir::separator() + "calamares" ); add_if_lib_exists( calaPythonPath, "libcalamares.so", m_pythonPaths ); bp::object sys = bp::import( "sys" ); foreach ( QString path, m_pythonPaths ) { bp::str dir = path.toLocal8Bit().data(); sys.attr( "path" ).attr( "append" )( dir ); } } Helper::~Helper() {} Helper* Helper::instance() { static Helper* s_helper = nullptr; if ( !s_helper ) { s_helper = new Helper; } return s_helper; } boost::python::dict Helper::createCleanNamespace() { // To make sure we run each script with a clean namespace, we only fetch the // builtin namespace from the interpreter as it was when freshly initialized. bp::dict scriptNamespace; scriptNamespace[ "__builtins__" ] = m_mainNamespace[ "__builtins__" ]; return scriptNamespace; } QString Helper::handleLastError() { PyObject *type = nullptr, *val = nullptr, *traceback_p = nullptr; PyErr_Fetch( &type, &val, &traceback_p ); Logger::CDebug debug; debug.noquote() << "Python Error:\n"; QString typeMsg; if ( type != nullptr ) { bp::handle<> h_type( type ); bp::str pystr( h_type ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { typeMsg = QString::fromStdString( extracted() ).trimmed(); } if ( typeMsg.isEmpty() ) { typeMsg = tr( "Unknown exception type" ); } debug << typeMsg << '\n'; } QString valMsg; if ( val != nullptr ) { bp::handle<> h_val( val ); bp::str pystr( h_val ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { valMsg = QString::fromStdString( extracted() ).trimmed(); } if ( valMsg.isEmpty() ) { valMsg = tr( "unparseable Python error" ); } // Special-case: CalledProcessError has an attribute "output" with the command output, // add that to the printed message. if ( typeMsg.contains( "CalledProcessError" ) ) { bp::object exceptionObject( h_val ); auto a = exceptionObject.attr( "output" ); bp::str outputString( a ); bp::extract< std::string > extractedOutput( outputString ); QString output; if ( extractedOutput.check() ) { output = QString::fromStdString( extractedOutput() ).trimmed(); } if ( !output.isEmpty() ) { // Replace the Type of the error by the warning string, // and use the output of the command (e.g. its stderr) as value. typeMsg = valMsg; valMsg = output; } } debug << valMsg << '\n'; } QString tbMsg; if ( traceback_p != nullptr ) { bp::handle<> h_tb( traceback_p ); bp::object traceback_module( bp::import( "traceback" ) ); bp::object format_tb( traceback_module.attr( "format_tb" ) ); bp::object tb_list( format_tb( h_tb ) ); bp::object pystr( bp::str( "\n" ).join( tb_list ) ); bp::extract< std::string > extracted( pystr ); if ( extracted.check() ) { tbMsg = QString::fromStdString( extracted() ).trimmed(); } if ( tbMsg.isEmpty() ) { tbMsg = tr( "unparseable Python traceback" ); } debug << tbMsg << '\n'; } if ( typeMsg.isEmpty() && valMsg.isEmpty() && tbMsg.isEmpty() ) { return tr( "Unfetchable Python error." ); } QStringList msgList; if ( !typeMsg.isEmpty() ) { msgList.append( QString( "%1" ).arg( typeMsg.toHtmlEscaped() ) ); } if ( !valMsg.isEmpty() ) { msgList.append( valMsg.toHtmlEscaped() ); } if ( !tbMsg.isEmpty() ) { msgList.append( QStringLiteral( "
Traceback:" ) ); msgList.append( QString( "
%1
" ).arg( tbMsg.toHtmlEscaped() ) ); } // Return a string made of the msgList items, wrapped in
tags return QString( "
%1
" ).arg( msgList.join( "
" ) ); } Calamares::GlobalStorage* GlobalStoragePythonWrapper::s_gs_instance = nullptr; // The special handling for nullptr is only for the testing // script for the python bindings, which passes in None; // normal use will have a GlobalStorage from JobQueue::instance() // passed in. Testing use will leak the allocated GlobalStorage // object, but that's OK for testing. GlobalStoragePythonWrapper::GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs ) : m_gs( gs ? gs : s_gs_instance ) { if ( !m_gs ) { s_gs_instance = new Calamares::GlobalStorage; m_gs = s_gs_instance; } } bool GlobalStoragePythonWrapper::contains( const std::string& key ) const { return m_gs->contains( QString::fromStdString( key ) ); } int GlobalStoragePythonWrapper::count() const { return m_gs->count(); } void GlobalStoragePythonWrapper::insert( const std::string& key, const bp::object& value ) { m_gs->insert( QString::fromStdString( key ), CalamaresPython::variantFromPyObject( value ) ); } bp::list GlobalStoragePythonWrapper::keys() const { bp::list pyList; const auto keys = m_gs->keys(); for ( const QString& key : keys ) { pyList.append( key.toStdString() ); } return pyList; } int GlobalStoragePythonWrapper::remove( const std::string& 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 { 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 calamares-3.2.41.1/src/libcalamares/PythonHelper.h000066400000000000000000000045111410275732300216750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_PYTHONJOBHELPER_H #define CALAMARES_PYTHONJOBHELPER_H #include "PythonJob.h" #include "utils/BoostPython.h" #include namespace Calamares { class GlobalStorage; } namespace CalamaresPython { boost::python::object variantToPyObject( const QVariant& variant ); QVariant variantFromPyObject( const boost::python::object& pyObject ); boost::python::list variantListToPyList( const QVariantList& variantList ); QVariantList variantListFromPyList( const boost::python::list& pyList ); boost::python::dict variantMapToPyDict( const QVariantMap& variantMap ); QVariantMap variantMapFromPyDict( const boost::python::dict& pyDict ); boost::python::dict variantHashToPyDict( const QVariantHash& variantHash ); QVariantHash variantHashFromPyDict( const boost::python::dict& pyDict ); class Helper : public QObject { Q_OBJECT public: boost::python::dict createCleanNamespace(); QString handleLastError(); static Helper* instance(); private: ~Helper() override; explicit Helper(); boost::python::object m_mainModule; boost::python::object m_mainNamespace; QStringList m_pythonPaths; }; class GlobalStoragePythonWrapper { public: explicit GlobalStoragePythonWrapper( Calamares::GlobalStorage* gs ); bool contains( const std::string& key ) const; int count() const; void insert( const std::string& key, const boost::python::api::object& value ); boost::python::list keys() const; int remove( const std::string& key ); boost::python::api::object value( const std::string& key ) const; // This is a helper for scripts that do not go through // the JobQueue (i.e. the module testpython script), // which allocate their own (singleton) GlobalStorage. static Calamares::GlobalStorage* globalStorageInstance() { return s_gs_instance; } private: Calamares::GlobalStorage* m_gs; static Calamares::GlobalStorage* s_gs_instance; // See globalStorageInstance() }; } // namespace CalamaresPython #endif // CALAMARES_PYTHONJOBHELPER_H calamares-3.2.41.1/src/libcalamares/PythonJob.cpp000066400000000000000000000352011410275732300215230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PythonJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "PythonHelper.h" #include "PythonJobApi.h" #include "utils/BoostPython.h" #include "utils/Logger.h" #include static const char* s_preScript = nullptr; namespace bp = boost::python; 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 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_call_str_overloads, CalamaresPython::check_target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_call_list_overloads, CalamaresPython::check_target_env_call, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_output_str_overloads, CalamaresPython::check_target_env_output, 1, 3 ); BOOST_PYTHON_FUNCTION_OVERLOADS( check_target_env_output_list_overloads, CalamaresPython::check_target_env_output, 1, 3 ); BOOST_PYTHON_MODULE( libcalamares ) { bp::object package = bp::scope(); package.attr( "__path__" ) = "libcalamares"; bp::scope().attr( "ORGANIZATION_NAME" ) = CALAMARES_ORGANIZATION_NAME; bp::scope().attr( "ORGANIZATION_DOMAIN" ) = CALAMARES_ORGANIZATION_DOMAIN; bp::scope().attr( "APPLICATION_NAME" ) = CALAMARES_APPLICATION_NAME; bp::scope().attr( "VERSION" ) = CALAMARES_VERSION; bp::scope().attr( "VERSION_SHORT" ) = CALAMARES_VERSION_SHORT; bp::class_< CalamaresPython::PythonJobInterface >( "Job", bp::init< Calamares::PythonJob* >() ) .def_readonly( "module_name", &CalamaresPython::PythonJobInterface::moduleName ) .def_readonly( "pretty_name", &CalamaresPython::PythonJobInterface::prettyName ) .def_readonly( "working_path", &CalamaresPython::PythonJobInterface::workingPath ) .def_readonly( "configuration", &CalamaresPython::PythonJobInterface::configuration ) .def( "setprogress", &CalamaresPython::PythonJobInterface::setprogress, bp::args( "progress" ), "Reports the progress status of this job to Calamares, " "as a real number between 0 and 1." ); bp::class_< CalamaresPython::GlobalStoragePythonWrapper >( "GlobalStorage", bp::init< Calamares::GlobalStorage* >() ) .def( "contains", &CalamaresPython::GlobalStoragePythonWrapper::contains ) .def( "count", &CalamaresPython::GlobalStoragePythonWrapper::count ) .def( "insert", &CalamaresPython::GlobalStoragePythonWrapper::insert ) .def( "keys", &CalamaresPython::GlobalStoragePythonWrapper::keys ) .def( "remove", &CalamaresPython::GlobalStoragePythonWrapper::remove ) .def( "value", &CalamaresPython::GlobalStoragePythonWrapper::value ); // libcalamares.utils submodule starts here bp::object utilsModule( bp::handle<>( bp::borrowed( PyImport_AddModule( "libcalamares.utils" ) ) ) ); bp::scope().attr( "utils" ) = utilsModule; bp::scope utilsScope = utilsModule; Q_UNUSED( utilsScope ) 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( "mount", &CalamaresPython::mount, mount_overloads( bp::args( "device_path", "mount_point", "filesystem_name", "options" ), "Runs the mount utility with the specified parameters.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments" ) ); bp::def( "target_env_call", static_cast< int ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::target_env_call ), target_env_call_str_overloads( bp::args( "command", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments\n" "-4 = QProcess timeout" ) ); bp::def( "target_env_call", static_cast< int ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::target_env_call ), target_env_call_list_overloads( bp::args( "args", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns the program's exit code, or:\n" "-1 = QProcess crash\n" "-2 = QProcess cannot start\n" "-3 = bad arguments\n" "-4 = QProcess timeout" ) ); bp::def( "check_target_env_call", static_cast< int ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::check_target_env_call ), check_target_env_call_str_overloads( bp::args( "command", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns 0, which is program's exit code if the program exited " "successfully, or raises a subprocess.CalledProcessError." ) ); bp::def( "check_target_env_call", static_cast< int ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::check_target_env_call ), check_target_env_call_list_overloads( bp::args( "args", "stdin", "timeout" ), "Runs the specified command in the chroot of the target system.\n" "Returns 0, which is program's exit code if the program exited " "successfully, or raises a subprocess.CalledProcessError." ) ); bp::def( "check_target_env_output", static_cast< std::string ( * )( const std::string&, const std::string&, int ) >( &CalamaresPython::check_target_env_output ), check_target_env_output_str_overloads( bp::args( "command", "stdin", "timeout" ), "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( "check_target_env_output", static_cast< std::string ( * )( const bp::list&, const std::string&, int ) >( &CalamaresPython::check_target_env_output ), check_target_env_output_list_overloads( bp::args( "args", "stdin", "timeout" ), "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( "obscure", &CalamaresPython::obscure, bp::args( "s" ), "Simple string obfuscation function based on KStringHandler::obscure.\n" "Returns a string, generated using a simple symmetric encryption.\n" "Applying the function to a string obscured by this function will result " "in the original string." ); bp::def( "gettext_languages", &CalamaresPython::gettext_languages, "Returns list of languages (most to least-specific) for gettext." ); bp::def( "gettext_path", &CalamaresPython::gettext_path, "Returns path for gettext search." ); } namespace Calamares { struct PythonJob::Private { bp::object m_prettyStatusMessage; }; PythonJob::PythonJob( const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration, QObject* parent ) : Job( parent ) , m_d( std::make_unique< Private >() ) , m_scriptFile( scriptFile ) , m_workingPath( workingPath ) , m_description() , m_configurationMap( moduleConfiguration ) { } PythonJob::~PythonJob() {} QString PythonJob::prettyName() const { return QDir( m_workingPath ).dirName(); } QString PythonJob::prettyStatusMessage() const { // The description is updated when progress is reported, see emitProgress() if ( m_description.isEmpty() ) { return tr( "Running %1 operation." ).arg( QDir( m_workingPath ).dirName() ); } else { return m_description; } } static QString pythonStringMethod( bp::dict& script, const char* funcName ) { bp::object func = script.get( funcName, bp::object() ); if ( !func.is_none() ) { bp::extract< std::string > result( func() ); return result.check() ? QString::fromStdString( result() ).trimmed() : QString(); } return QString(); } JobResult PythonJob::exec() { // We assume m_scriptFile to be relative to m_workingPath. QDir workingDir( m_workingPath ); if ( !workingDir.exists() || !workingDir.isReadable() ) { return JobResult::error( tr( "Bad working directory path" ), tr( "Working directory %1 for python job %2 is not readable." ).arg( m_workingPath ).arg( prettyName() ) ); } QFileInfo scriptFI( workingDir.absoluteFilePath( m_scriptFile ) ); if ( !scriptFI.exists() || !scriptFI.isFile() || !scriptFI.isReadable() ) { return JobResult::error( tr( "Bad main script file" ), tr( "Main script file %1 for python job %2 is not readable." ) .arg( scriptFI.absoluteFilePath() ) .arg( prettyName() ) ); } try { bp::dict scriptNamespace = CalamaresPython::Helper::instance()->createCleanNamespace(); bp::object calamaresModule = bp::import( "libcalamares" ); bp::dict calamaresNamespace = bp::extract< bp::dict >( calamaresModule.attr( "__dict__" ) ); calamaresNamespace[ "job" ] = CalamaresPython::PythonJobInterface( this ); 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 ); bp::object entryPoint = scriptNamespace[ "run" ]; m_d->m_prettyStatusMessage = scriptNamespace.get( "pretty_status_message", bp::object() ); m_description = pythonStringMethod( scriptNamespace, "pretty_name" ); if ( m_description.isEmpty() ) { bp::extract< std::string > entryPoint_doc_attr( entryPoint.attr( "__doc__" ) ); if ( entryPoint_doc_attr.check() ) { m_description = QString::fromStdString( entryPoint_doc_attr() ).trimmed(); auto i_newline = m_description.indexOf( '\n' ); if ( i_newline > 0 ) { m_description.truncate( i_newline ); } cDebug() << Logger::SubEntry << "Job description from __doc__" << prettyName() << '=' << m_description; } } else { cDebug() << Logger::SubEntry << "Job description from pretty_name" << prettyName() << '=' << m_description; } emit progress( 0 ); bp::object runResult = entryPoint(); if ( runResult.is_none() ) { return JobResult::ok(); } else // Something happened in the Python job { bp::tuple resultTuple = bp::extract< bp::tuple >( runResult ); QString message = QString::fromStdString( bp::extract< std::string >( resultTuple[ 0 ] ) ); QString description = QString::fromStdString( bp::extract< std::string >( resultTuple[ 1 ] ) ); return JobResult::error( message, description ); } } catch ( bp::error_already_set& ) { QString msg; if ( PyErr_Occurred() ) { msg = CalamaresPython::Helper::instance()->handleLastError(); } bp::handle_exception(); PyErr_Clear(); return JobResult::internalError( tr( "Boost.Python error in job \"%1\"." ).arg( prettyName() ), msg, JobResult::PythonUncaughtException ); } } void PythonJob::emitProgress( qreal progressValue ) { // This is called from the JobApi (and only from there) from the Job thread, // so it is safe to call into the Python interpreter. Update the description // as needed (don't call this from prettyStatusMessage(), which can be // called from other threads as well). if ( m_d && !m_d->m_prettyStatusMessage.is_none() ) { QString r; bp::extract< std::string > result( m_d->m_prettyStatusMessage() ); r = result.check() ? QString::fromStdString( result() ).trimmed() : QString(); if ( !r.isEmpty() ) { m_description = r; } } emit progress( progressValue ); } void PythonJob::setInjectedPreScript( const char* preScript ) { s_preScript = preScript; cDebug() << "Python pre-script set to" << Logger::Pointer( preScript ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/PythonJob.h000066400000000000000000000036421410275732300211740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 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. * */ #ifndef CALAMARES_PYTHONJOB_H #define CALAMARES_PYTHONJOB_H #include "Job.h" #include "modulesystem/InstanceKey.h" #include #include namespace CalamaresPython { class PythonJobInterface; class Helper; } // namespace CalamaresPython namespace Calamares { class PythonJob : public Job { Q_OBJECT public: explicit PythonJob( const QString& scriptFile, const QString& workingPath, const QVariantMap& moduleConfiguration = QVariantMap(), QObject* parent = nullptr ); ~PythonJob() override; QString prettyName() const override; QString prettyStatusMessage() const override; JobResult exec() 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; friend class CalamaresPython::PythonJobInterface; void emitProgress( double progressValue ); std::unique_ptr< Private > m_d; QString m_scriptFile; QString m_workingPath; QString m_description; QVariantMap m_configurationMap; }; } // namespace Calamares #endif // CALAMARES_PYTHONJOB_H calamares-3.2.41.1/src/libcalamares/PythonJobApi.cpp000066400000000000000000000205031410275732300221540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PythonJobApi.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "PythonHelper.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/String.h" #include #include #include namespace bp = boost::python; static int _handle_check_target_env_call_error( const CalamaresUtils::ProcessResult& ec, const QString& cmd ) { if ( !ec.first ) { return ec.first; } QString raise = QString( "import subprocess\n" "e = subprocess.CalledProcessError(%1,\"%2\")\n" ) .arg( ec.first ) .arg( cmd ); if ( !ec.second.isEmpty() ) { raise.append( QStringLiteral( "e.output = \"\"\"%1\"\"\"\n" ).arg( ec.second ) ); } raise.append( "raise e" ); bp::exec( raise.toStdString().c_str() ); bp::throw_error_already_set(); return ec.first; } namespace CalamaresPython { int mount( const std::string& device_path, const std::string& mount_point, const std::string& filesystem_name, const std::string& options ) { return CalamaresUtils::Partition::mount( QString::fromStdString( device_path ), QString::fromStdString( mount_point ), QString::fromStdString( filesystem_name ), 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 ) { return _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, timeout ).first; } int target_env_call( const bp::list& args, const std::string& stdin, int timeout ) { return _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ).first; } int check_target_env_call( const std::string& command, const std::string& stdin, int timeout ) { auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, 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 ) { auto ec = _target_env_command( _bp_list_to_qstringlist( args ), stdin, timeout ); if ( !ec.first ) { return ec.first; } 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 ) { auto ec = _target_env_command( QStringList { QString::fromStdString( command ) }, stdin, 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 ) { QStringList list = _bp_list_to_qstringlist( args ); auto ec = _target_env_command( list, stdin, timeout ); _handle_check_target_env_call_error( ec, list.join( ' ' ) ); return ec.second.toStdString(); } static const char output_prefix[] = "[PYTHON JOB]:"; void debug( const std::string& s ) { Logger::CDebug( Logger::LOGDEBUG ) << output_prefix << QString::fromStdString( s ); } void warning( const std::string& s ) { Logger::CDebug( Logger::LOGWARNING ) << output_prefix << QString::fromStdString( s ); } PythonJobInterface::PythonJobInterface( Calamares::PythonJob* parent ) : m_parent( parent ) { auto moduleDir = QDir( m_parent->m_workingPath ); moduleName = moduleDir.dirName().toStdString(); prettyName = m_parent->prettyName().toStdString(); workingPath = m_parent->m_workingPath.toStdString(); configuration = CalamaresPython::variantMapToPyDict( m_parent->m_configurationMap ); } void PythonJobInterface::setprogress( qreal progress ) { if ( progress >= 0.0 && progress <= 1.0 ) { m_parent->emitProgress( progress ); } } std::string obscure( const std::string& string ) { return CalamaresUtils::obscure( QString::fromStdString( string ) ).toStdString(); } static QStringList _gettext_languages() { QStringList languages; // There are two ways that Python jobs can be initialised: // - through JobQueue, in which case that has an instance which holds // a GlobalStorage object, or // - through the Python test-script, which initialises its // own GlobalStoragePythonWrapper, which then holds a // GlobalStorage object for all of Python. Calamares::JobQueue* jq = Calamares::JobQueue::instance(); Calamares::GlobalStorage* gs = jq ? jq->globalStorage() : CalamaresPython::GlobalStoragePythonWrapper::globalStorageInstance(); QVariant localeConf_ = gs->value( "localeConf" ); if ( localeConf_.canConvert< QVariantMap >() ) { QVariant lang_ = localeConf_.value< QVariantMap >()[ "LANG" ]; if ( lang_.canConvert< QString >() ) { QString lang = lang_.value< QString >(); languages.append( lang ); if ( lang.indexOf( '.' ) > 0 ) { lang.truncate( lang.indexOf( '.' ) ); languages.append( lang ); } if ( lang.indexOf( '_' ) > 0 ) { lang.truncate( lang.indexOf( '_' ) ); languages.append( lang ); } } } return languages; } bp::list gettext_languages() { bp::list pyList; for ( auto lang : _gettext_languages() ) { pyList.append( lang.toStdString() ); } return pyList; } static void _add_localedirs( QStringList& pathList, const QString& candidate ) { if ( !candidate.isEmpty() && !pathList.contains( candidate ) ) { pathList.prepend( candidate ); if ( QDir( candidate ).cd( "lang" ) ) { pathList.prepend( candidate + "/lang" ); } } } bp::object gettext_path() { // TODO: distinguish between -d runs and normal runs // TODO: can we detect DESTDIR-installs? QStringList candidatePaths = QStandardPaths::locateAll( QStandardPaths::GenericDataLocation, "locale", QStandardPaths::LocateDirectory ); QString extra = QCoreApplication::applicationDirPath(); _add_localedirs( candidatePaths, extra ); // Often /usr/local/bin if ( !extra.isEmpty() ) { QDir d( extra ); if ( d.cd( "../share/locale" ) ) // Often /usr/local/bin/../share/locale -> /usr/local/share/locale { _add_localedirs( candidatePaths, d.canonicalPath() ); } } _add_localedirs( candidatePaths, QDir().canonicalPath() ); // . 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(); return bp::object( localedir.toStdString() ); } } cDebug() << Logger::SubEntry << "No translation found for languages" << candidateLanguages; return bp::object(); // None } } // namespace CalamaresPython calamares-3.2.41.1/src/libcalamares/PythonJobApi.h000066400000000000000000000037621410275732300216310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PYTHONJOBAPI_H #define PYTHONJOBAPI_H #include "utils/BoostPython.h" #include // For qreal namespace Calamares { class PythonJob; } namespace CalamaresPython { int mount( const std::string& device_path, const std::string& mount_point, 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 boost::python::list& args, const std::string& stdin = 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 boost::python::list& args, const std::string& stdin = std::string(), int timeout = 0 ); std::string check_target_env_output( const std::string& command, const std::string& stdin = 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 ); std::string obscure( const std::string& string ); boost::python::object gettext_path(); boost::python::list gettext_languages(); void debug( const std::string& s ); void warning( const std::string& s ); class PythonJobInterface { public: explicit PythonJobInterface( Calamares::PythonJob* parent ); std::string moduleName; std::string prettyName; std::string workingPath; boost::python::dict configuration; void setprogress( qreal progress ); private: Calamares::PythonJob* m_parent; }; } // namespace CalamaresPython #endif // PYTHONJOBAPI_H calamares-3.2.41.1/src/libcalamares/Settings.cpp000066400000000000000000000324351410275732300214150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #include "Settings.h" #include "CalamaresConfig.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include static bool hasValue( const YAML::Node& v ) { return v.IsDefined() && !v.IsNull(); } /** @brief Helper function to grab a QString out of the config, and to warn if not present. */ static QString requireString( const YAML::Node& config, const char* key ) { auto v = config[ key ]; if ( hasValue( v ) ) { return QString::fromStdString( v.as< std::string >() ); } else { cWarning() << Logger::SubEntry << "Required settings.conf key" << key << "is missing."; return QString(); } } /** @brief Helper function to grab a bool out of the config, and to warn if not present. */ static bool requireBool( const YAML::Node& config, const char* key, bool d ) { auto v = config[ key ]; if ( hasValue( v ) ) { return v.as< bool >(); } else { cWarning() << Logger::SubEntry << "Required settings.conf key" << key << "is missing."; return d; } } namespace Calamares { InstanceDescription::InstanceDescription( const Calamares::ModuleSystem::InstanceKey& key ) : m_instanceKey( key ) , m_weight( -1 ) { if ( !isValid() ) { m_weight = 0; } else { m_configFileName = key.module() + QStringLiteral( ".conf" ); } } 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; Settings* Settings::instance() { return s_instance; } static void interpretModulesSearch( const bool debugMode, const QStringList& rawPaths, QStringList& output ) { for ( const auto& path : rawPaths ) { if ( path == "local" ) { // If we're running in debug mode, we assume we might also be // running from the build dir, so we add a maximum priority // module search path in the build dir. if ( debugMode ) { QString buildDirModules = QDir::current().absolutePath() + QDir::separator() + "src" + QDir::separator() + "modules"; if ( QDir( buildDirModules ).exists() ) { output.append( buildDirModules ); } } // Install path is set in CalamaresAddPlugin.cmake output.append( CalamaresUtils::systemLibDir().absolutePath() + QDir::separator() + "calamares" + QDir::separator() + "modules" ); } else { QDir d( path ); if ( d.exists() && d.isReadable() ) { output.append( d.absolutePath() ); } else { cDebug() << Logger::SubEntry << "module-search entry non-existent" << path; } } } } static void interpretInstances( const YAML::Node& node, Settings::InstanceDescriptionList& customInstances ) { // Parse the custom instances section if ( node ) { QVariant instancesV = CalamaresUtils::yamlToVariant( node ).toList(); if ( instancesV.type() == QVariant::List ) { const auto instances = instancesV.toList(); for ( const QVariant& instancesVListItem : instances ) { if ( instancesVListItem.type() != QVariant::Map ) { continue; } 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 ); } } } } static void interpretSequence( const YAML::Node& node, Settings::ModuleSequence& moduleSequence ) { // Parse the modules sequence section if ( node ) { QVariant sequenceV = CalamaresUtils::yamlToVariant( node ); if ( !( sequenceV.type() == QVariant::List ) ) { throw YAML::Exception( YAML::Mark(), "sequence key does not have a list-value" ); } const auto sequence = sequenceV.toList(); for ( const QVariant& sequenceVListItem : sequence ) { if ( sequenceVListItem.type() != QVariant::Map ) { continue; } QString thisActionS = sequenceVListItem.toMap().firstKey(); ModuleSystem::Action thisAction; if ( thisActionS == "show" ) { thisAction = ModuleSystem::Action::Show; } else if ( thisActionS == "exec" ) { thisAction = ModuleSystem::Action::Exec; } else { cDebug() << "Unknown action in *sequence*" << thisActionS; continue; } QStringList thisActionRoster = sequenceVListItem.toMap().value( thisActionS ).toStringList(); 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 { throw YAML::Exception( YAML::Mark(), "sequence key is missing" ); } } Settings::Settings( bool debugMode ) : QObject() , m_debug( debugMode ) , m_doChroot( true ) , m_promptInstall( false ) , m_disableCancel( false ) , m_disableCancelDuringExec( false ) { } Settings::Settings( const QString& settingsFilePath, bool debugMode ) : QObject() , m_debug( debugMode ) , m_doChroot( true ) , m_promptInstall( false ) , m_disableCancel( false ) , m_disableCancelDuringExec( false ) { cDebug() << "Using Calamares settings file at" << settingsFilePath; QFile file( settingsFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { setConfiguration( file.readAll(), file.fileName() ); } else { cWarning() << "Cannot read settings file" << file.fileName(); } s_instance = this; } 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 { return m_modulesSearchPaths; } Settings::InstanceDescriptionList Settings::moduleInstances() const { return m_moduleInstances; } Settings::ModuleSequence Settings::modulesSequence() const { return m_modulesSequence; } QString Settings::brandingComponentName() const { return m_brandingComponentName; } static QStringList settingsFileCandidates( bool assumeBuilddir ) { static const char settings[] = "settings.conf"; QStringList settingsPaths; if ( CalamaresUtils::isAppDataDirOverridden() ) { settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); } else { if ( assumeBuilddir ) { settingsPaths << QDir::current().absoluteFilePath( settings ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraConfigDirs() ) { settingsPaths << ( s + settings ); } settingsPaths << CMAKE_INSTALL_FULL_SYSCONFDIR "/calamares/settings.conf"; // String concat settingsPaths << CalamaresUtils::appDataDir().absoluteFilePath( settings ); } return settingsPaths; } Settings* Settings::init( bool debugMode ) { if ( s_instance ) { cWarning() << "Calamares::Settings already created"; return s_instance; } QStringList settingsFileCandidatesByPriority = settingsFileCandidates( debugMode ); QFileInfo settingsFile; bool found = false; foreach ( const QString& path, settingsFileCandidatesByPriority ) { QFileInfo pathFi( path ); if ( pathFi.exists() && pathFi.isReadable() ) { settingsFile = pathFi; found = true; break; } } if ( !found || !settingsFile.exists() || !settingsFile.isReadable() ) { cError() << "Cowardly refusing to continue startup without settings." << Logger::DebugList( settingsFileCandidatesByPriority ); if ( CalamaresUtils::isAppDataDirOverridden() ) { cError() << "FATAL: explicitly configured application data directory is missing settings.conf"; } else { cError() << "FATAL: none of the expected configuration file paths exist."; } ::exit( EXIT_FAILURE ); } auto* settings = new Calamares::Settings( settingsFile.absoluteFilePath(), debugMode ); // Creates singleton if ( settings->modulesSequence().count() < 1 ) { cError() << "FATAL: no sequence set."; ::exit( EXIT_FAILURE ); } return settings; } Settings* Settings::init( const QString& path ) { if ( s_instance ) { cWarning() << "Calamares::Settings already created"; return s_instance; } 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 calamares-3.2.41.1/src/libcalamares/Settings.h000066400000000000000000000141521410275732300210560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #ifndef SETTINGS_H #define SETTINGS_H #include "DllMacro.h" #include "modulesystem/Actions.h" #include "modulesystem/InstanceKey.h" #include #include namespace Calamares { /** @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 { using InstanceKey = Calamares::ModuleSystem::InstanceKey; 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 static Settings* init( bool debugMode ); /// @brief Explicif filename, debug is always true (for testing) static Settings* init( const QString& filename ); QStringList modulesSearchPaths() const; using InstanceDescriptionList = QList< InstanceDescription >; /** @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, 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, * modules and settings are loaded from more locations, to help * development and debugging. */ bool debugMode() const { return m_debug; } /** @brief Distinguish "install" from "OEM" modes. * * Returns true in "install" mode, which is where actions happen * in a chroot -- the target system, which exists separately from * the source system. In "OEM" mode, returns false and most actions * apply to the *current* (host) system. */ bool doChroot() const { return m_doChroot; } /** @brief Global setting of prompt-before-install. * * Returns true when the configuration is such that the user * should be prompted one-last-time before any action is taken * that really affects the machine. */ bool showPromptBeforeExecution() const { return m_promptInstall; } /** @brief Distinguish between "install" and "setup" modes. * * This influences user-visible strings, for instance using the * word "setup" instead of "install" where relevant. */ bool isSetupMode() const { return m_isSetupMode; } /** @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; } private: static Settings* s_instance; QStringList m_modulesSearchPaths; InstanceDescriptionList m_moduleInstances; ModuleSequence m_modulesSequence; QString m_brandingComponentName; // bools are initialized here according to default setting bool m_debug; 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 #endif // SETTINGS_H calamares-3.2.41.1/src/libcalamares/Tests.cpp000066400000000000000000000475131410275732300207220ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/libcalamares/geoip/000077500000000000000000000000001410275732300202055ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/geoip/GeoIPFixed.cpp000066400000000000000000000013351410275732300226360ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/geoip/GeoIPFixed.h000066400000000000000000000022241410275732300223010ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/geoip/GeoIPJSON.cpp000066400000000000000000000042401410275732300223460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 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 "GeoIPJSON.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "utils/Yaml.h" #include namespace CalamaresUtils { namespace GeoIP { GeoIPJSON::GeoIPJSON( const QString& attribute ) : Interface( attribute.isEmpty() ? QStringLiteral( "time_zone" ) : attribute ) { } /** @brief Indexes into a map @m by selectors @p l * * Each element of @p l is an index into map @m or a sub-map thereof, * so that "foo.bar.baz" looks up "baz" in the sub-map "bar" of sub-map * "foo" of @p m, like a regular JSON lookup would. */ static QString selectMap( const QVariantMap& m, const QStringList& l, int index ) { if ( index >= l.count() ) { return QString(); } QString attributeName = l[ index ]; if ( index == l.count() - 1 ) { return CalamaresUtils::getString( m, attributeName ); } else { bool success = false; // bogus if ( m.contains( attributeName ) ) { return selectMap( CalamaresUtils::getSubMap( m, attributeName, success ), l, index + 1 ); } return QString(); } } QString GeoIPJSON::rawReply( const QByteArray& data ) { try { YAML::Node doc = YAML::Load( data ); QVariant var = CalamaresUtils::yamlToVariant( doc ); if ( !var.isNull() && var.isValid() && var.type() == QVariant::Map ) { return selectMap( var.toMap(), m_element.split( '.' ), 0 ); } else { cWarning() << "Invalid YAML data for GeoIPJSON"; } } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, data, "GeoIP data" ); } return QString(); } GeoIP::RegionZonePair GeoIPJSON::processReply( const QByteArray& data ) { return splitTZString( rawReply( data ) ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/geoip/GeoIPJSON.h000066400000000000000000000022261410275732300220150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef GEOIP_GEOIPJSON_H #define GEOIP_GEOIPJSON_H #include "Interface.h" namespace CalamaresUtils { namespace GeoIP { /** @brief GeoIP lookup for services that return JSON. * * This is the original implementation of GeoIP lookup, * (e.g. using the FreeGeoIP.net service), or similar. * * The data is assumed to be in JSON format with a time_zone attribute. * * @note This class is an implementation detail. */ class GeoIPJSON : public Interface { public: /** @brief Configure the attribute name which is selected. * * If an empty string is passed in (not a valid attribute name), * then "time_zone" is used. */ explicit GeoIPJSON( const QString& attribute = QString() ); virtual RegionZonePair processReply( const QByteArray& ) override; virtual QString rawReply( const QByteArray& ) override; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/geoip/GeoIPTests.cpp000066400000000000000000000175431410275732300227110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "GeoIPTests.h" #include "GeoIPFixed.h" #include "GeoIPJSON.h" #ifdef QT_XML_LIB #include "GeoIPXML.h" #endif #include "Handler.h" #include "network/Manager.h" #include QTEST_GUILESS_MAIN( GeoIPTests ) using namespace CalamaresUtils::GeoIP; GeoIPTests::GeoIPTests() {} GeoIPTests::~GeoIPTests() {} void GeoIPTests::initTestCase() { } static const char json_data_attribute[] = "{\"time_zone\":\"Europe/Amsterdam\"}"; void GeoIPTests::testJSON() { GeoIPJSON handler; auto tz = handler.processReply( json_data_attribute ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) ); // JSON is quite tolerant tz = handler.processReply( "time_zone: \"Europe/Brussels\"" ); QCOMPARE( tz.second, QStringLiteral( "Brussels" ) ); tz = handler.processReply( "time_zone: America/New_York\n" ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); } void GeoIPTests::testJSONalt() { GeoIPJSON handler( "zona_de_hora" ); auto tz = handler.processReply( json_data_attribute ); QCOMPARE( tz.first, QString() ); // Not found tz = handler.processReply( "tarifa: 12\nzona_de_hora: Europe/Madrid" ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Madrid" ) ); } void GeoIPTests::testJSONbad() { static const char data[] = "time_zone: 1"; GeoIPJSON handler; auto tz = handler.processReply( data ); tz = handler.processReply( data ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "404 Forbidden" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "{ time zone = 'America/LosAngeles'}" ); QCOMPARE( tz.first, QString() ); } static const char xml_data_ubiquity[] = R"( 85.150.1.1 OK NL NLD Netherlands None None None 50.0 4.0 0 Europe/Amsterdam )"; void GeoIPTests::testXML() { #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( xml_data_ubiquity ); QCOMPARE( tz.first, QStringLiteral( "Europe" ) ); QCOMPARE( tz.second, QStringLiteral( "Amsterdam" ) ); #endif } void GeoIPTests::testXML2() { static const char data[] = "America/North Dakota/Beulah"; // With a space! #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( data ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); // Without space #endif } void GeoIPTests::testXMLalt() { #ifdef QT_XML_LIB GeoIPXML handler( "ZT" ); auto tz = handler.processReply( "Moon/Dark_side" ); QCOMPARE( tz.first, QStringLiteral( "Moon" ) ); QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) ); #endif } void GeoIPTests::testXMLbad() { #ifdef QT_XML_LIB GeoIPXML handler; auto tz = handler.processReply( "{time_zone: \"Europe/Paris\"}" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "" ); QCOMPARE( tz.first, QString() ); tz = handler.processReply( "fnord" ); QCOMPARE( tz.first, QString() ); #endif } void GeoIPTests::testSplitTZ() { using namespace CalamaresUtils::GeoIP; auto tz = splitTZString( QStringLiteral( "Moon/Dark_side" ) ); QCOMPARE( tz.first, QStringLiteral( "Moon" ) ); QCOMPARE( tz.second, QStringLiteral( "Dark_side" ) ); // Some providers return weirdly escaped data tz = splitTZString( QStringLiteral( "America\\/NewYork" ) ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "NewYork" ) ); // That's not actually the zone name // Check that bogus data fails tz = splitTZString( QString() ); QCOMPARE( tz.first, QString() ); tz = splitTZString( QStringLiteral( "America.NewYork" ) ); QCOMPARE( tz.first, QString() ); // Check that three-level is split properly and space is replaced tz = splitTZString( QStringLiteral( "America/North Dakota/Beulah" ) ); QCOMPARE( tz.first, QStringLiteral( "America" ) ); QCOMPARE( tz.second, QStringLiteral( "North_Dakota/Beulah" ) ); } #define CHECK_GET( t, selector, url ) \ { \ auto tz = GeoIP##t( selector ) \ .processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( QUrl( url ) ) ); \ qDebug() << tz; \ QCOMPARE( default_tz, tz ); \ auto tz2 = CalamaresUtils::GeoIP::Handler( "" #t, url, selector ).get(); \ qDebug() << tz2; \ QCOMPARE( default_tz, tz2 ); \ } void GeoIPTests::testGet() { if ( !QProcessEnvironment::systemEnvironment().contains( QStringLiteral( "TEST_HTTP_GET" ) ) ) { qDebug() << "Skipping HTTP GET tests, set TEST_HTTP_GET environment variable to enable"; return; } GeoIPJSON default_handler; // Call the KDE service the definitive source. auto default_tz = default_handler.processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( QUrl( "https://geoip.kde.org/v1/calamares" ) ) ); // This is bogus, because the test isn't always run by me // QCOMPARE( default_tz.first, QStringLiteral("Europe") ); // QCOMPARE( default_tz.second, QStringLiteral("Amsterdam") ); QVERIFY( !default_tz.first.isEmpty() ); QVERIFY( !default_tz.second.isEmpty() ); // Each expansion of CHECK_GET does a synchronous GET, then checks that // the TZ data is the same as the default_tz; this is fragile if the // services don't agree on the location of where the test is run. CHECK_GET( JSON, QString(), "https://geoip.kde.org/v1/calamares" ) // Check it's consistent CHECK_GET( JSON, QStringLiteral( "timezone" ), "https://ipapi.co/json" ) // Different JSON CHECK_GET( JSON, QStringLiteral( "timezone" ), "http://ip-api.com/json" ) CHECK_GET( JSON, QStringLiteral( "Location.TimeZone" ), "https://geoip.kde.org/debug" ) // 2-level JSON #ifdef QT_XML_LIB CHECK_GET( XML, QString(), "http://geoip.ubuntu.com/lookup" ) // Ubiquity's XML format 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 ); } } calamares-3.2.41.1/src/libcalamares/geoip/GeoIPTests.h000066400000000000000000000013011410275732300223370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef GEOIPTESTS_H #define GEOIPTESTS_H #include class GeoIPTests : public QObject { Q_OBJECT public: GeoIPTests(); ~GeoIPTests() override; private Q_SLOTS: void initTestCase(); void testFixed(); void testJSON(); void testJSONalt(); void testJSONbad(); void testXML(); void testXML2(); void testXMLalt(); void testXMLbad(); void testSplitTZ(); void testGet(); }; #endif calamares-3.2.41.1/src/libcalamares/geoip/GeoIPXML.cpp000066400000000000000000000037771410275732300222530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "GeoIPXML.h" #include "utils/Logger.h" #include namespace CalamaresUtils { namespace GeoIP { GeoIPXML::GeoIPXML( const QString& element ) : Interface( element.isEmpty() ? QStringLiteral( "TimeZone" ) : element ) { } static QStringList getElementTexts( const QByteArray& data, const QString& tag ) { QStringList elements; QString domError; int errorLine, errorColumn; QDomDocument doc; if ( doc.setContent( data, false, &domError, &errorLine, &errorColumn ) ) { const auto tzElements = doc.elementsByTagName( tag ); cDebug() << "GeoIP found" << tzElements.length() << "elements"; for ( int it = 0; it < tzElements.length(); ++it ) { auto e = tzElements.at( it ).toElement(); auto e_text = e.text(); if ( !e_text.isEmpty() ) { elements.append( e_text ); } } } else { cWarning() << "GeoIP XML data error:" << domError << "(line" << errorLine << errorColumn << ')'; } if ( elements.count() < 1 ) { cWarning() << "GeopIP XML had no non-empty elements" << tag; } return elements; } QString GeoIPXML::rawReply( const QByteArray& data ) { for ( const auto& e : getElementTexts( data, m_element ) ) { if ( !e.isEmpty() ) { return e; } } return QString(); } GeoIP::RegionZonePair GeoIPXML::processReply( const QByteArray& data ) { for ( const auto& e : getElementTexts( data, m_element ) ) { auto tz = splitTZString( e ); if ( !tz.first.isEmpty() ) { return tz; } } return RegionZonePair(); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/geoip/GeoIPXML.h000066400000000000000000000022421410275732300217020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef GEOIP_GEOIPXML_H #define GEOIP_GEOIPXML_H #include "Interface.h" namespace CalamaresUtils { namespace GeoIP { /** @brief GeoIP lookup with XML data * * The data is assumed to be in XML format with a * * element, which contains the text (string) for the region/zone. This * format is expected by, e.g. the Ubiquity installer. * * @note This class is an implementation detail. */ class GeoIPXML : public Interface { public: /** @brief Configure the element tag which is selected. * * If an empty string is passed in (not a valid element tag), * then "TimeZone" is used. */ explicit GeoIPXML( const QString& element = QString() ); virtual RegionZonePair processReply( const QByteArray& ) override; virtual QString rawReply( const QByteArray& ) override; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/geoip/Handler.cpp000066400000000000000000000102551410275732300222710ustar00rootroot00000000000000/* === 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 "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" #include "utils/Variant.h" #include static const NamedEnumTable< CalamaresUtils::GeoIP::Handler::Type >& handlerTypes() { using Type = CalamaresUtils::GeoIP::Handler::Type; // *INDENT-OFF* // clang-format off static const NamedEnumTable names{ { QStringLiteral( "none" ), Type::None }, { QStringLiteral( "json" ), Type::JSON }, { QStringLiteral( "xml" ), Type::XML }, { QStringLiteral( "fixed" ), Type::Fixed } }; // *INDENT-ON* // clang-format on return names; } namespace CalamaresUtils { namespace GeoIP { Handler::Handler() : m_type( Type::None ) { } Handler::Handler( const QString& implementation, const QString& url, const QString& selector ) : m_type( Type::None ) , m_url( url ) , m_selector( selector ) { bool ok = false; m_type = handlerTypes().find( implementation, ok ); if ( !ok ) { cWarning() << "GeoIP style" << implementation << "is not recognized."; } else if ( m_type == Type::None ) { 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 ) { m_type = Type::None; cWarning() << "GeoIP style *xml* is not supported in this version of Calamares."; } #endif } Handler::~Handler() {} static std::unique_ptr< Interface > create_interface( Handler::Type t, const QString& selector ) { switch ( t ) { case Handler::Type::None: return nullptr; case Handler::Type::JSON: return std::make_unique< GeoIPJSON >( selector ); case Handler::Type::XML: #if defined( QT_XML_LIB ) return std::make_unique< GeoIPXML >( selector ); #else return nullptr; #endif case Handler::Type::Fixed: return std::make_unique< GeoIPFixed >( selector ); } __builtin_unreachable(); } static RegionZonePair do_query( Handler::Type type, const QString& url, const QString& selector ) { const auto interface = create_interface( type, selector ); if ( !interface ) { return RegionZonePair(); } using namespace CalamaresUtils::Network; return interface->processReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url, { RequestOptions::FakeUserAgent } ) ); } static QString do_raw_query( Handler::Type type, const QString& url, const QString& selector ) { const auto interface = create_interface( type, selector ); if ( !interface ) { return QString(); } using namespace CalamaresUtils::Network; return interface->rawReply( CalamaresUtils::Network::Manager::instance().synchronousGet( url, { RequestOptions::FakeUserAgent } ) ); } RegionZonePair Handler::get() const { if ( !isValid() ) { return RegionZonePair(); } return do_query( m_type, m_url, m_selector ); } QFuture< RegionZonePair > Handler::query() const { Handler::Type type = m_type; QString url = m_url; QString selector = m_selector; return QtConcurrent::run( [=] { return do_query( type, url, selector ); } ); } QString Handler::getRaw() const { if ( !isValid() ) { return QString(); } return do_raw_query( m_type, m_url, m_selector ); } QFuture< QString > Handler::queryRaw() const { Handler::Type type = m_type; QString url = m_url; QString selector = m_selector; return QtConcurrent::run( [=] { return do_raw_query( type, url, selector ); } ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/geoip/Handler.h000066400000000000000000000047531410275732300217440ustar00rootroot00000000000000/* === 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 GEOIP_HANDLER_H #define GEOIP_HANDLER_H #include "Interface.h" #include #include #include namespace CalamaresUtils { namespace GeoIP { /** @brief Handle one complete GeoIP lookup. * * This class handles one complete GeoIP lookup. Create it with * suitable configuration values, then call get(). This is a * synchronous API and will return an invalid zone pair on * error or if the configuration is not understood. For an * async API, use query(). */ class DLLEXPORT Handler { public: enum class Type { 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. */ Handler(); /** @brief A handler for a specific GeoIP source. * * The @p implementation name selects an implementation; currently JSON and XML * are supported. The @p url is retrieved by query() and then the @p selector * is used to select something from the data returned by the @url. */ Handler( const QString& implementation, const QString& url, const QString& selector ); ~Handler(); /** @brief Synchronously get the GeoIP result. * * If the Handler is valid, then do the actual fetching and interpretation * of data and return the result. An invalid Handler will return an * invalid (empty) result. */ RegionZonePair get() const; /// @brief Like get, but don't interpret the contents QString getRaw() const; /** @brief Asynchronously get the GeoIP result. * * See get() for the return value. */ QFuture< RegionZonePair > query() const; /// @brief Like query, but don't interpret the contents QFuture< QString > queryRaw() const; bool isValid() const { return m_type != Type::None; } Type type() const { return m_type; } QString url() const { return m_url; } QString selector() const { return m_selector; } private: Type m_type; const QString m_url; const QString m_selector; }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/geoip/Interface.cpp000066400000000000000000000017561410275732300226220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Interface.h" #include "utils/Logger.h" #include "utils/String.h" namespace CalamaresUtils { namespace GeoIP { Interface::Interface( const QString& e ) : m_element( e ) { } Interface::~Interface() {} RegionZonePair splitTZString( const QString& tz ) { QString timezoneString( tz ); timezoneString.remove( '\\' ); timezoneString.replace( ' ', '_' ); QStringList tzParts = timezoneString.split( '/', SplitSkipEmptyParts ); if ( tzParts.size() >= 2 ) { QString region = tzParts.takeFirst(); QString zone = tzParts.join( '/' ); return RegionZonePair( region, zone ); } return RegionZonePair( QString(), QString() ); } } // namespace GeoIP } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/geoip/Interface.h000066400000000000000000000055341410275732300222650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef GEOIP_INTERFACE_H #define GEOIP_INTERFACE_H #include "DllMacro.h" #include #include #include class QByteArray; namespace CalamaresUtils { namespace GeoIP { /** @brief A Region, Zone pair of strings * * A GeoIP lookup returns a timezone, which is represented as a Region, * Zone pair of strings (e.g. "Europe" and "Amsterdam"). Generally, * pasting the strings back together with a "/" is the right thing to * do. The Zone **may** contain a "/" (e.g. "Kentucky/Monticello"). */ class DLLEXPORT RegionZonePair : public QPair< QString, QString > { public: /** @brief Construct from an existing pair. */ explicit RegionZonePair( const QPair& p ) : QPair( p ) { } /** @brief Construct from two strings, like qMakePair(). */ RegionZonePair( const QString& region, const QString& zone ) : QPair( region, zone ) { } /** @brief An invalid zone pair (empty strings). */ RegionZonePair() : QPair( QString(), QString() ) { } bool isValid() const { return !first.isEmpty(); } }; /** @brief Splits a region/zone string into a pair. * * Cleans up the string by removing backslashes (\\) * since some providers return silly-escaped names. Replaces * spaces with _ since some providers return human-readable names. * Splits on the first / in the resulting string, or returns a * pair of empty QStrings if it can't. (e.g. America/North Dakota/Beulah * will return "America", "North_Dakota/Beulah"). */ DLLEXPORT RegionZonePair splitTZString( const QString& s ); /** * @brief Interface for GeoIP retrievers. * * A GeoIP retriever takes a configured URL (from the config file) * and can handle the data returned from its interpretation of that * configured URL, returning a region and zone. */ class DLLEXPORT Interface { public: virtual ~Interface(); /** @brief Handle a (successful) request by interpreting the data. * * Should return a ( , ) pair, e.g. * ( "Europe", "Amsterdam" ). This is called **only** if the * request to the fullUrl was successful; the handler * is free to read as much, or as little, data as it * likes. On error, returns a RegionZonePair with empty * strings (e.g. ( "", "" ) ). */ virtual RegionZonePair processReply( const QByteArray& ) = 0; /** @brief Get the raw reply data. */ virtual QString rawReply( const QByteArray& ) = 0; protected: Interface( const QString& element = QString() ); QString m_element; // string for selecting from data }; } // namespace GeoIP } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/geoip/test_geoip.cpp000066400000000000000000000037541410275732300230640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /** * This is a test-application that does one GeoIP parse. */ #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 ) && ( argc != 3 ) ) { 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" ) == format ) { handler = new GeoIPJSON( selector ); } #ifdef QT_XML_LIB else if ( QStringLiteral( "xml" ) == format ) { handler = new GeoIPXML( selector ); } #endif else if ( QStringLiteral( "fixed" ) == format ) { handler = new GeoIPFixed( selector ); } if ( !handler ) { cerr << "Unknown format '" << format.toLatin1().constData() << "'\n"; return 1; } QByteArray ba; while ( !std::cin.eof() ) { char arr[ 1024 ]; std::cin.read( arr, sizeof( arr ) ); int s = static_cast< int >( std::cin.gcount() ); ba.append( arr, s ); } auto tz = handler->processReply( ba ); if ( tz.first.isEmpty() ) { std::cout << "No TimeZone determined from input.\n"; } else { std::cout << "TimeZone Region=" << tz.first.toLatin1().constData() << "\nTimeZone Zone=" << tz.second.toLatin1().constData() << '\n'; } return 0; } calamares-3.2.41.1/src/libcalamares/locale/000077500000000000000000000000001410275732300203415ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/locale/CountryData_p.cpp000066400000000000000000000372321410275732300236300ustar00rootroot00000000000000/* GENERATED FILE DO NOT EDIT * * === This file is part of Calamares - === * * 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. * B. Definitions * 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. */ /* MODIFICATIONS * * Edited anyway: * 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. * */ // BEGIN Generated from CLDR data // *INDENT-OFF* // clang-format off struct CountryData { QLocale::Language l; QLocale::Country c; char cc1; char cc2; }; static constexpr int const country_data_size = 198; static const CountryData country_data_table[] = { { QLocale::Language::Catalan, QLocale::Country::Andorra, 'A', 'D' }, { QLocale::Language::Arabic, QLocale::Country::UnitedArabEmirates, 'A', 'E' }, { QLocale::Language::Persian, QLocale::Country::Afghanistan, 'A', 'F' }, { QLocale::Language::Albanian, QLocale::Country::Albania, 'A', 'L' }, { QLocale::Language::Armenian, QLocale::Country::Armenia, 'A', 'M' }, { QLocale::Language::Portuguese, QLocale::Country::Angola, 'A', 'O' }, { QLocale::Language::AnyLanguage, QLocale::Country::Antarctica, 'A', 'Q' }, { QLocale::Language::Spanish, QLocale::Country::Argentina, 'A', 'R' }, { QLocale::Language::Samoan, QLocale::Country::AmericanSamoa, 'A', 'S' }, { QLocale::Language::German, QLocale::Country::Austria, 'A', 'T' }, { QLocale::Language::Dutch, QLocale::Country::Aruba, 'A', 'W' }, { QLocale::Language::Swedish, QLocale::Country::AlandIslands, 'A', 'X' }, { QLocale::Language::Azerbaijani, QLocale::Country::Azerbaijan, 'A', 'Z' }, { QLocale::Language::Bosnian, QLocale::Country::BosniaAndHerzegowina, 'B', 'A' }, { QLocale::Language::Bengali, QLocale::Country::Bangladesh, 'B', 'D' }, { QLocale::Language::Dutch, QLocale::Country::Belgium, 'B', 'E' }, { QLocale::Language::French, QLocale::Country::BurkinaFaso, 'B', 'F' }, { QLocale::Language::Bulgarian, QLocale::Country::Bulgaria, 'B', 'G' }, { QLocale::Language::Arabic, QLocale::Country::Bahrain, 'B', 'H' }, { QLocale::Language::Rundi, QLocale::Country::Burundi, 'B', 'I' }, { QLocale::Language::French, QLocale::Country::Benin, 'B', 'J' }, { QLocale::Language::French, QLocale::Country::SaintBarthelemy, 'B', 'L' }, { QLocale::Language::Malay, QLocale::Country::Brunei, 'B', 'N' }, { QLocale::Language::Spanish, QLocale::Country::Bolivia, 'B', 'O' }, { QLocale::Language::Papiamento, QLocale::Country::Bonaire, 'B', 'Q' }, { 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::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' }, { QLocale::Language::German, QLocale::Country::Switzerland, 'C', 'H' }, { QLocale::Language::French, QLocale::Country::IvoryCoast, 'C', 'I' }, { QLocale::Language::Spanish, QLocale::Country::Chile, 'C', 'L' }, { QLocale::Language::French, QLocale::Country::Cameroon, 'C', 'M' }, { QLocale::Language::Chinese, QLocale::Country::China, 'C', 'N' }, { QLocale::Language::Spanish, QLocale::Country::Colombia, 'C', 'O' }, { QLocale::Language::AnyLanguage, QLocale::Country::ClippertonIsland, 'C', 'P' }, { QLocale::Language::Spanish, QLocale::Country::CostaRica, 'C', 'R' }, { QLocale::Language::Spanish, QLocale::Country::Cuba, 'C', 'U' }, { QLocale::Language::Portuguese, QLocale::Country::CapeVerde, 'C', 'V' }, { QLocale::Language::Papiamento, QLocale::Country::CuraSao, 'C', 'W' }, { QLocale::Language::Greek, QLocale::Country::Cyprus, 'C', 'Y' }, { QLocale::Language::Czech, QLocale::Country::CzechRepublic, 'C', 'Z' }, { QLocale::Language::German, QLocale::Country::Germany, 'D', 'E' }, { QLocale::Language::Afar, QLocale::Country::Djibouti, 'D', 'J' }, { QLocale::Language::Danish, QLocale::Country::Denmark, 'D', 'K' }, { QLocale::Language::Spanish, QLocale::Country::DominicanRepublic, 'D', 'O' }, { QLocale::Language::Arabic, QLocale::Country::Algeria, 'D', 'Z' }, { QLocale::Language::Spanish, QLocale::Country::CeutaAndMelilla, 'E', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Ecuador, 'E', 'C' }, { QLocale::Language::Estonian, QLocale::Country::Estonia, 'E', 'E' }, { QLocale::Language::Arabic, QLocale::Country::Egypt, 'E', 'G' }, { QLocale::Language::Arabic, QLocale::Country::WesternSahara, 'E', 'H' }, { QLocale::Language::Tigrinya, QLocale::Country::Eritrea, 'E', 'R' }, { QLocale::Language::Spanish, QLocale::Country::Spain, 'E', 'S' }, { QLocale::Language::Amharic, QLocale::Country::Ethiopia, 'E', 'T' }, { QLocale::Language::English, QLocale::Country::EuropeanUnion, 'E', 'U' }, { QLocale::Language::German, QLocale::Country::AnyCountry, 'E', 'Z' }, { QLocale::Language::Finnish, QLocale::Country::Finland, 'F', 'I' }, { QLocale::Language::Faroese, QLocale::Country::FaroeIslands, 'F', 'O' }, { QLocale::Language::French, QLocale::Country::France, 'F', 'R' }, { QLocale::Language::French, QLocale::Country::Gabon, 'G', 'A' }, { QLocale::Language::Georgian, QLocale::Country::Georgia, 'G', 'E' }, { QLocale::Language::French, QLocale::Country::FrenchGuiana, 'G', 'F' }, { QLocale::Language::Akan, QLocale::Country::Ghana, 'G', 'H' }, { QLocale::Language::Greenlandic, QLocale::Country::Greenland, 'G', 'L' }, { QLocale::Language::French, QLocale::Country::Guinea, 'G', 'N' }, { QLocale::Language::French, QLocale::Country::Guadeloupe, 'G', 'P' }, { QLocale::Language::Spanish, QLocale::Country::EquatorialGuinea, 'G', 'Q' }, { QLocale::Language::Greek, QLocale::Country::Greece, 'G', 'R' }, { QLocale::Language::AnyLanguage, QLocale::Country::SouthGeorgiaAndTheSouthSandwichIslands, 'G', 'S' }, { QLocale::Language::Spanish, QLocale::Country::Guatemala, 'G', 'T' }, { QLocale::Language::Portuguese, QLocale::Country::GuineaBissau, 'G', 'W' }, { QLocale::Language::Chinese, QLocale::Country::HongKong, 'H', 'K' }, { QLocale::Language::AnyLanguage, QLocale::Country::HeardAndMcDonaldIslands, 'H', 'M' }, { QLocale::Language::Spanish, QLocale::Country::Honduras, 'H', 'N' }, { QLocale::Language::Croatian, QLocale::Country::Croatia, 'H', 'R' }, { QLocale::Language::Haitian, QLocale::Country::Haiti, 'H', 'T' }, { QLocale::Language::Hungarian, QLocale::Country::Hungary, 'H', 'U' }, { QLocale::Language::Spanish, QLocale::Country::CanaryIslands, 'I', 'C' }, { QLocale::Language::Indonesian, QLocale::Country::Indonesia, 'I', 'D' }, { QLocale::Language::Hebrew, QLocale::Country::Israel, 'I', 'L' }, { QLocale::Language::AnyLanguage, QLocale::Country::India, 'I', 'N' }, { QLocale::Language::Arabic, QLocale::Country::Iraq, 'I', 'Q' }, { QLocale::Language::Persian, QLocale::Country::Iran, 'I', 'R' }, { QLocale::Language::Icelandic, QLocale::Country::Iceland, 'I', 'S' }, { QLocale::Language::Italian, QLocale::Country::Italy, 'I', 'T' }, { QLocale::Language::Arabic, QLocale::Country::Jordan, 'J', 'O' }, { QLocale::Language::Japanese, QLocale::Country::Japan, 'J', 'P' }, { QLocale::Language::Swahili, QLocale::Country::Kenya, 'K', 'E' }, { QLocale::Language::Kirghiz, QLocale::Country::Kyrgyzstan, 'K', 'G' }, { QLocale::Language::Khmer, QLocale::Country::Cambodia, 'K', 'H' }, { QLocale::Language::Arabic, QLocale::Country::Comoros, 'K', 'M' }, { QLocale::Language::Korean, QLocale::Country::NorthKorea, 'K', 'P' }, { QLocale::Language::Korean, QLocale::Country::SouthKorea, 'K', 'R' }, { QLocale::Language::Arabic, QLocale::Country::Kuwait, 'K', 'W' }, { QLocale::Language::Russian, QLocale::Country::Kazakhstan, 'K', 'Z' }, { QLocale::Language::Lao, QLocale::Country::Laos, 'L', 'A' }, { QLocale::Language::Arabic, QLocale::Country::Lebanon, 'L', 'B' }, { QLocale::Language::German, QLocale::Country::Liechtenstein, 'L', 'I' }, { QLocale::Language::Sinhala, QLocale::Country::SriLanka, 'L', 'K' }, { QLocale::Language::SouthernSotho, QLocale::Country::Lesotho, 'L', 'S' }, { QLocale::Language::Lithuanian, QLocale::Country::Lithuania, 'L', 'T' }, { QLocale::Language::French, QLocale::Country::Luxembourg, 'L', 'U' }, { QLocale::Language::Latvian, QLocale::Country::Latvia, 'L', 'V' }, { QLocale::Language::Arabic, QLocale::Country::Libya, 'L', 'Y' }, { QLocale::Language::Arabic, QLocale::Country::Morocco, 'M', 'A' }, { QLocale::Language::French, QLocale::Country::Monaco, 'M', 'C' }, { QLocale::Language::Romanian, QLocale::Country::Moldova, 'M', 'D' }, { QLocale::Language::Serbian, QLocale::Country::Montenegro, 'M', 'E' }, { QLocale::Language::French, QLocale::Country::SaintMartin, 'M', 'F' }, { QLocale::Language::Malagasy, QLocale::Country::Madagascar, 'M', 'G' }, { QLocale::Language::Macedonian, QLocale::Country::Macedonia, 'M', 'K' }, { QLocale::Language::Bambara, QLocale::Country::Mali, 'M', 'L' }, { QLocale::Language::Burmese, QLocale::Country::Myanmar, 'M', 'M' }, { QLocale::Language::Mongolian, QLocale::Country::Mongolia, 'M', 'N' }, { QLocale::Language::Chinese, QLocale::Country::Macau, 'M', 'O' }, { QLocale::Language::French, QLocale::Country::Martinique, 'M', 'Q' }, { QLocale::Language::Arabic, QLocale::Country::Mauritania, 'M', 'R' }, { QLocale::Language::Maltese, QLocale::Country::Malta, 'M', 'T' }, { QLocale::Language::Morisyen, QLocale::Country::Mauritius, 'M', 'U' }, { QLocale::Language::Divehi, QLocale::Country::Maldives, 'M', 'V' }, { QLocale::Language::Spanish, QLocale::Country::Mexico, 'M', 'X' }, { QLocale::Language::Malay, QLocale::Country::Malaysia, 'M', 'Y' }, { QLocale::Language::Portuguese, QLocale::Country::Mozambique, 'M', 'Z' }, { QLocale::Language::Afrikaans, QLocale::Country::Namibia, 'N', 'A' }, { QLocale::Language::French, QLocale::Country::NewCaledonia, 'N', 'C' }, { QLocale::Language::Hausa, QLocale::Country::Niger, 'N', 'E' }, { QLocale::Language::Spanish, QLocale::Country::Nicaragua, 'N', 'I' }, { QLocale::Language::Dutch, QLocale::Country::Netherlands, 'N', 'L' }, { QLocale::Language::NorwegianBokmal, QLocale::Country::Norway, 'N', 'O' }, { QLocale::Language::Nepali, QLocale::Country::Nepal, 'N', 'P' }, { QLocale::Language::Arabic, QLocale::Country::Oman, 'O', 'M' }, { QLocale::Language::Spanish, QLocale::Country::Panama, 'P', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Peru, 'P', 'E' }, { QLocale::Language::French, QLocale::Country::FrenchPolynesia, 'P', 'F' }, { QLocale::Language::TokPisin, QLocale::Country::PapuaNewGuinea, 'P', 'G' }, { QLocale::Language::Filipino, QLocale::Country::Philippines, 'P', 'H' }, { QLocale::Language::Urdu, QLocale::Country::Pakistan, 'P', 'K' }, { QLocale::Language::Polish, QLocale::Country::Poland, 'P', 'L' }, { QLocale::Language::French, QLocale::Country::SaintPierreAndMiquelon, 'P', 'M' }, { QLocale::Language::Spanish, QLocale::Country::PuertoRico, 'P', 'R' }, { QLocale::Language::Arabic, QLocale::Country::PalestinianTerritories, 'P', 'S' }, { QLocale::Language::Portuguese, QLocale::Country::Portugal, 'P', 'T' }, { QLocale::Language::Palauan, QLocale::Country::Palau, 'P', 'W' }, { QLocale::Language::Guarani, QLocale::Country::Paraguay, 'P', 'Y' }, { QLocale::Language::Arabic, QLocale::Country::Qatar, 'Q', 'A' }, { QLocale::Language::English, QLocale::Country::OutlyingOceania, 'Q', 'O' }, { QLocale::Language::French, QLocale::Country::Reunion, 'R', 'E' }, { QLocale::Language::Romanian, QLocale::Country::Romania, 'R', 'O' }, { QLocale::Language::Serbian, QLocale::Country::Serbia, 'R', 'S' }, { QLocale::Language::Russian, QLocale::Country::Russia, 'R', 'U' }, { QLocale::Language::Kinyarwanda, QLocale::Country::Rwanda, 'R', 'W' }, { QLocale::Language::Arabic, QLocale::Country::SaudiArabia, 'S', 'A' }, { QLocale::Language::French, QLocale::Country::Seychelles, 'S', 'C' }, { QLocale::Language::Arabic, QLocale::Country::Sudan, 'S', 'D' }, { QLocale::Language::Swedish, QLocale::Country::Sweden, 'S', 'E' }, { QLocale::Language::Slovenian, QLocale::Country::Slovenia, 'S', 'I' }, { QLocale::Language::NorwegianBokmal, QLocale::Country::SvalbardAndJanMayenIslands, 'S', 'J' }, { QLocale::Language::Slovak, QLocale::Country::Slovakia, 'S', 'K' }, { QLocale::Language::Italian, QLocale::Country::SanMarino, 'S', 'M' }, { QLocale::Language::French, QLocale::Country::Senegal, 'S', 'N' }, { QLocale::Language::Somali, QLocale::Country::Somalia, 'S', 'O' }, { QLocale::Language::Dutch, QLocale::Country::Suriname, 'S', 'R' }, { QLocale::Language::Portuguese, QLocale::Country::SaoTomeAndPrincipe, 'S', 'T' }, { QLocale::Language::Spanish, QLocale::Country::ElSalvador, 'S', 'V' }, { QLocale::Language::Arabic, QLocale::Country::Syria, 'S', 'Y' }, { QLocale::Language::French, QLocale::Country::Chad, 'T', 'D' }, { QLocale::Language::French, QLocale::Country::FrenchSouthernTerritories, 'T', 'F' }, { 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::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::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' }, { QLocale::Language::Swahili, QLocale::Country::Uganda, 'U', 'G' }, { QLocale::Language::Spanish, QLocale::Country::Uruguay, 'U', 'Y' }, { QLocale::Language::Uzbek, QLocale::Country::Uzbekistan, 'U', 'Z' }, { QLocale::Language::Italian, QLocale::Country::VaticanCityState, 'V', 'A' }, { QLocale::Language::Spanish, QLocale::Country::Venezuela, 'V', 'E' }, { QLocale::Language::Vietnamese, QLocale::Country::Vietnam, 'V', 'N' }, { QLocale::Language::Bislama, QLocale::Country::Vanuatu, 'V', 'U' }, { QLocale::Language::French, QLocale::Country::WallisAndFutunaIslands, 'W', 'F' }, { QLocale::Language::Samoan, QLocale::Country::Samoa, 'W', 'S' }, { QLocale::Language::Albanian, QLocale::Country::Kosovo, 'X', 'K' }, { QLocale::Language::Arabic, QLocale::Country::Yemen, 'Y', 'E' }, { QLocale::Language::French, QLocale::Country::Mayotte, 'Y', 'T' }, { QLocale::Language::Shona, QLocale::Country::Zimbabwe, 'Z', 'W' }, { QLocale::Language::AnyLanguage, QLocale::Country::AnyCountry, 0, 0 }, }; static_assert( (sizeof(country_data_table) / sizeof(CountryData)) == country_data_size, "Table size mismatch for CountryData" ); // END Generated from CLDR data calamares-3.2.41.1/src/libcalamares/locale/Global.cpp000066400000000000000000000035461410275732300222550ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/locale/Global.h000066400000000000000000000045501410275732300217160ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/locale/Label.cpp000066400000000000000000000057471410275732300221010ustar00rootroot00000000000000/* === 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 "Label.h" #include /** @brief Handle special cases of Calamares language names * * If a given @p localeName (e.g. en_US, or sr@latin) has special handling, * returns a pair of pointers: * - a pointer to a QLocale; this is the locale to use, or may be @c nullptr * to indicate that the Qt locale derived from @p localeName is accepatable. * - a pointer to a QString; this is the native language name to use, or may * be @c nullptr to indicate that the Qt value is acceptable. * * Returns a pair of nullptrs for non-special cases. */ static std::pair< QLocale*, QString* > specialCase( const QString& localeName ) { if ( localeName == "sr@latin" ) { static QLocale loc( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia ); return { &loc, nullptr }; } if ( localeName == "ca@valencia" ) { static QString name = QStringLiteral( "Català (València)" ); return { nullptr, &name }; } return { nullptr, nullptr }; } 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 ) { auto special = specialCase( locale ); QString longFormat = QObject::tr( "%1 (%2)" ); QString languageName = special.second ? *special.second : m_locale.nativeLanguageName(); QString englishName = m_locale.languageToString( m_locale.language() ); if ( languageName.isEmpty() ) { languageName = QString( "* %1 (%2)" ).arg( locale, englishName ); } bool needsCountryName = ( format == LabelFormat::AlwaysWithCountry ) || ( locale.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 Label::getLocale( const QString& localeName ) { if ( localeName.isEmpty() ) { return QLocale(); } auto special = specialCase( localeName ); return special.first ? *special.first : QLocale( localeName ); } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/locale/Label.h000066400000000000000000000066301410275732300215360ustar00rootroot00000000000000/* === 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. * * */ #ifndef LOCALE_LABEL_H #define LOCALE_LABEL_H #include #include #include namespace CalamaresUtils { namespace Locale { /** * @brief Consistent locale (language + country) naming. * * 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 { Q_OBJECT public: /** @brief Formatting option for label -- add (country) to label. */ enum class LabelFormat { AlwaysWithCountry, IfNeededWithCountry }; /** @brief Empty locale. This uses the system-default locale. */ Label( QObject* parent = nullptr ); /** @brief Construct from a locale name. * * The @p localeName should be one that Qt recognizes, e.g. en_US or ar_EY. * 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 ); /** @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; } /** @brief Is this locale English? * * en_US and en (American English) is defined as English. The Queen's * English -- proper English -- is relegated to non-English status. */ bool isEnglish() const { return m_localeId == QLatin1String( "en_US" ) || m_localeId == QLatin1String( "en" ); } /** @brief Get the human-readable name for this locale. */ QString label() const { return m_label; } /** @brief Get the *English* human-readable name for this locale. */ QString englishLabel() const { return m_englishLabel; } /** @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 Convenience accessor to the language part of the locale QLocale::Language language() const { return m_locale.language(); } /// @brief Convenience accessor to the country part (if any) of the locale QLocale::Country country() const { return m_locale.country(); } /** @brief Get a Qt locale for the given @p localeName * * This obeys special cases as described in the class documentation. */ static QLocale getLocale( const QString& localeName ); protected: 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; }; } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/locale/LabelModel.cpp000066400000000000000000000060511410275732300230470ustar00rootroot00000000000000/* === 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 "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 calamares-3.2.41.1/src/libcalamares/locale/LabelModel.h000066400000000000000000000046051410275732300225170ustar00rootroot00000000000000/* === 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. * * */ #ifndef LOCALE_LABELMODEL_H #define LOCALE_LABELMODEL_H #include "DllMacro.h" #include "Label.h" #include #include namespace CalamaresUtils { namespace Locale { class DLLEXPORT LabelModel : public QAbstractListModel { Q_OBJECT public: enum { LabelRole = Qt::DisplayRole, EnglishLabelRole = Qt::UserRole + 1 }; LabelModel( const QStringList& locales, QObject* parent = nullptr ); ~LabelModel() override; int rowCount( const QModelIndex& parent ) const override; QVariant data( const QModelIndex& index, int role ) const override; QHash< int, QByteArray > roleNames() const override; /** @brief Gets locale information for entry #n * * 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; /// @brief Returns all of the locale Ids (e.g. en_US) put into this model. const QStringList& localeIds() const { return m_localeIds; } /** @brief Searches for an item that matches @p predicate * * 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; /// @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; private: QVector< Label* > m_locales; QStringList m_localeIds; }; /** @brief Returns a model with all available translations. * * The translations are set when Calamares is compiled; the list * is provided by CMake via the CALAMARES_TRANSLATION_LANGUAGES * #define. * * This model is a singleton and can be shared. * * NOTE: While the model is not typed const, it should be. Do not modify. */ DLLEXPORT LabelModel* availableTranslations(); } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/locale/Lookup.cpp000066400000000000000000000043531410275732300223230ustar00rootroot00000000000000/* === 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 "Lookup.h" #include "CountryData_p.cpp" namespace CalamaresUtils { namespace Locale { struct TwoChar { TwoChar( const QString& code ) : cc1( 0 ) , cc2( 0 ) { if ( code.length() == 2 ) { cc1 = code[ 0 ].toLatin1(); cc2 = code[ 1 ].toLatin1(); } } char cc1; char cc2; }; static const CountryData* lookup( TwoChar c ) { if ( !c.cc1 ) { return nullptr; } 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 ); } ); if ( p == country_data_table + country_data_size ) { return nullptr; } return p; } QLocale::Country countryForCode( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? p->c : QLocale::Country::AnyCountry; } QLocale::Language languageForCountry( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? p->l : QLocale::Language::AnyLanguage; } QPair< QLocale::Country, QLocale::Language > countryData( const QString& code ) { const CountryData* p = lookup( TwoChar( code ) ); return p ? qMakePair( p->c, p->l ) : qMakePair( QLocale::Country::AnyCountry, QLocale::Language::AnyLanguage ); } QLocale countryLocale( const QString& code ) { auto p = countryData( code ); return QLocale( p.second, p.first ); } QLocale::Language 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; } ); if ( p == country_data_table + country_data_size ) { return QLocale::Language::AnyLanguage; } return p->l; } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/locale/Lookup.h000066400000000000000000000027621410275732300217720ustar00rootroot00000000000000/* === 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_LOOKUP_H #define LOCALE_LOOKUP_H #include "DllMacro.h" #include #include namespace CalamaresUtils { namespace Locale { /* All the functions in this file do lookups of locale data * based on CLDR tables; these are lookups that you can't (easily) * do with just QLocale (e.g. from 2-letter country code to a likely * locale). */ /// @brief Map a 2-letter code to a Country, or AnyCountry if not found DLLEXPORT QLocale::Country countryForCode( const QString& code ); /** @brief Map a Country to a Language, or AnyLanguage if not found * * This is a *likely* language for the given country, based on the * CLDR tables. For instance, this maps Belgium to Dutch. */ DLLEXPORT QLocale::Language languageForCountry( QLocale::Country country ); /// @brief Map a 2-letter code to a Language, or AnyLanguage if not found DLLEXPORT QLocale::Language languageForCountry( const QString& code ); /// @brief Get both Country and Language for a 2-letter code DLLEXPORT QPair< QLocale::Country, QLocale::Language > countryData( const QString& code ); /// @brief Get a likely locale for a 2-letter country code DLLEXPORT QLocale countryLocale( const QString& code ); } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/locale/Tests.cpp000066400000000000000000000423461410275732300221600ustar00rootroot00000000000000/* === 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 "locale/Global.h" #include "locale/LabelModel.h" #include "locale/TimeZone.h" #include "locale/TranslatableConfiguration.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include 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() {} 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" ) ); } void LocaleTests::testLanguageModelCount() { const auto* m = CalamaresUtils::Locale::availableTranslations(); QVERIFY( m ); QVERIFY( m->rowCount( QModelIndex() ) > 1 ); int dutch = m->find( QLocale( "nl_NL" ) ); QVERIFY( dutch > 0 ); QCOMPARE( m->find( "NL" ), dutch ); // must be capitals QCOMPARE( m->find( "nl" ), -1 ); QCOMPARE( m->find( QLocale( "nl" ) ), dutch ); // Belgium speaks Dutch as well QCOMPARE( m->find( "BE" ), dutch ); } void LocaleTests::testLanguageScripts() { const auto* m = CalamaresUtils::Locale::availableTranslations(); QVERIFY( m ); // Cursory test that all the locales found have a sensible language, // and that some specific languages have sensible corresponding data. // // This fails on Esperanto (or, if Esperanto is added to Qt, then // this will pass and the test after the loop will fail. for ( int i = 0; i < m->rowCount( QModelIndex() ); ++i ) { const auto& label = m->locale( i ); const auto locale = label.locale(); cDebug() << label.label() << locale; QVERIFY( locale.language() == QLocale::Greek ? locale.script() == QLocale::GreekScript : true ); QVERIFY( locale.language() == QLocale::Korean ? locale.script() == QLocale::KoreanScript : true ); 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() { static QStringList languages { "nl", "de", "da", "nb", "sr@latin", "ar", "ru" }; return languages; } /** @brief Check consistency of test data * Check that all the languages used in testing, are actually enabled * in Calamares translations. */ void LocaleTests::testTranslatableLanguages() { QStringList availableLanguages = QString( CALAMARES_TRANSLATION_LANGUAGES ).split( ';' ); cDebug() << "Translation languages:" << availableLanguages; for ( const auto& language : someLanguages() ) { // Could be QVERIFY, but then we don't see what language code fails QCOMPARE( availableLanguages.contains( language ) ? language : QString(), language ); } } /** @brief Test strings with no translations */ void LocaleTests::testTranslatableConfig1() { CalamaresUtils::Locale::TranslatedString ts0; QVERIFY( ts0.isEmpty() ); QCOMPARE( ts0.count(), 1 ); // the empty string CalamaresUtils::Locale::TranslatedString ts1( "Hello" ); QCOMPARE( ts1.count(), 1 ); QVERIFY( !ts1.isEmpty() ); QCOMPARE( ts1.get(), QStringLiteral( "Hello" ) ); QCOMPARE( ts1.get( QLocale( "nl" ) ), QStringLiteral( "Hello" ) ); QVariantMap map; map.insert( "description", "description (no language)" ); CalamaresUtils::Locale::TranslatedString ts2( map, "description" ); QCOMPARE( ts2.count(), 1 ); QVERIFY( !ts2.isEmpty() ); QCOMPARE( ts2.get(), QStringLiteral( "description (no language)" ) ); QCOMPARE( ts2.get( QLocale( "nl" ) ), QStringLiteral( "description (no language)" ) ); } /** @bref Test strings with translations. */ void LocaleTests::testTranslatableConfig2() { QVariantMap map; for ( const auto& language : someLanguages() ) { map.insert( QString( "description[%1]" ).arg( language ), QString( "description (language %1)" ).arg( language ) ); if ( language != "nl" ) { map.insert( QString( "name[%1]" ).arg( language ), QString( "name (language %1)" ).arg( language ) ); } } // If there's no untranslated string in the map, it is considered empty CalamaresUtils::Locale::TranslatedString ts0( map, "description" ); QVERIFY( ts0.isEmpty() ); // Because no untranslated string QCOMPARE( ts0.count(), someLanguages().count() + 1 ); // But there are entries for the translations, plus an empty string // expand the map with untranslated entries map.insert( QString( "description" ), "description (no language)" ); map.insert( QString( "name" ), "name (no language)" ); CalamaresUtils::Locale::TranslatedString ts1( map, "description" ); // The +1 is because "" is always also inserted QCOMPARE( ts1.count(), someLanguages().count() + 1 ); QVERIFY( !ts1.isEmpty() ); QCOMPARE( ts1.get(), QStringLiteral( "description (no language)" ) ); // it wasn't set QCOMPARE( ts1.get( QLocale( "nl" ) ), QStringLiteral( "description (language nl)" ) ); for ( const auto& language : someLanguages() ) { // Skip Serbian (latin) because QLocale() constructed with it // doesn't retain the @latin part. if ( language == "sr@latin" ) { continue; } // Could be QVERIFY, but then we don't see what language code fails QCOMPARE( ts1.get( language ) == QString( "description (language %1)" ).arg( language ) ? language : QString(), language ); } QCOMPARE( ts1.get( QLocale( QLocale::Language::Serbian, QLocale::Script::LatinScript, QLocale::Country::Serbia ) ), QStringLiteral( "description (language sr@latin)" ) ); CalamaresUtils::Locale::TranslatedString ts2( map, "name" ); // We skipped dutch this time QCOMPARE( ts2.count(), someLanguages().count() ); QVERIFY( !ts2.isEmpty() ); // This key doesn't exist CalamaresUtils::Locale::TranslatedString ts3( map, "front" ); QVERIFY( ts3.isEmpty() ); 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" ) ) { 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 ) { 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 { 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" calamares-3.2.41.1/src/libcalamares/locale/TimeZone.cpp000066400000000000000000000315571410275732300226120ustar00rootroot00000000000000/* === 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 "TimeZone.h" #include "locale/TranslatableString.h" #include "utils/Logger.h" #include "utils/String.h" #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 ) { double sign = 1, num = 0.00; // Determine sign if ( str.startsWith( '-' ) ) { sign = -1; str.remove( 0, 1 ); } else if ( str.startsWith( '+' ) ) { str.remove( 0, 1 ); } if ( str.length() == 4 || str.length() == 6 ) { num = str.mid( 0, 2 ).toDouble() + str.mid( 2, 2 ).toDouble() / 60.0; } else if ( str.length() == 5 || str.length() == 7 ) { num = str.mid( 0, 3 ).toDouble() + str.mid( 3, 2 ).toDouble() / 60.0; } return sign * num; } 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 ) { setObjectName( region + '/' + zone ); } QString 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" ); } static void loadTZData( RegionVector& regions, ZoneVector& zones, QTextStream& in ) { while ( !in.atEnd() ) { QString line = in.readLine().trimmed().split( '#', SplitKeepEmptyParts ).first().trimmed(); if ( line.isEmpty() ) { continue; } QStringList list = line.split( QRegExp( "[\t ]" ), SplitSkipEmptyParts ); if ( list.size() < 3 ) { continue; } QStringList timezoneParts = list.at( 2 ).split( '/', SplitSkipEmptyParts ); if ( timezoneParts.size() < 2 ) { continue; } QString region = timezoneParts.first().trimmed(); if ( region.isEmpty() ) { continue; } QString countryCode = list.at( 0 ).trimmed(); if ( countryCode.size() != 2 ) { continue; } timezoneParts.removeFirst(); QString zone = timezoneParts.join( '/' ); if ( zone.length() < 2 ) { 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 ); } } }; static Private* privateInstance() { static Private* s_p = new Private; return s_p; } RegionsModel::RegionsModel( QObject* parent ) : QAbstractListModel( parent ) , m_private( privateInstance() ) { } RegionsModel::~RegionsModel() {} int RegionsModel::rowCount( const QModelIndex& ) const { return m_private->m_regions.count(); } QVariant RegionsModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() || index.row() < 0 || index.row() >= m_private->m_regions.count() ) { return QVariant(); } const auto& region = m_private->m_regions[ index.row() ]; if ( role == NameRole ) { return region->tr(); } if ( role == KeyRole ) { return region->key(); } return QVariant(); } QHash< int, QByteArray > RegionsModel::roleNames() const { return { { NameRole, "name" }, { KeyRole, "key" } }; } QString RegionsModel::tr( const QString& region ) const { for ( const auto* p : m_private->m_regions ) { if ( p->key() == region ) { return p->tr(); } } 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" calamares-3.2.41.1/src/libcalamares/locale/TimeZone.h000066400000000000000000000144741410275732300222560ustar00rootroot00000000000000/* === 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. * * */ /** @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 "locale/TranslatableString.h" #include #include #include #include namespace CalamaresUtils { namespace Locale { class Private; class RegionalZonesModel; class ZonesModel; 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: TimeZoneData( const QString& region, const QString& zone, const QString& country, double latitude, double longitude ); TimeZoneData( const TimeZoneData& ) = delete; TimeZoneData( TimeZoneData&& ) = delete; QString tr() const override; 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; } private: QString m_region; QString m_country; double m_latitude; double m_longitude; }; /** @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 public: 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; QHash< int, QByteArray > roleNames() const override; 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: 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 regionChanged( const QString& ); private: Private* m_private; QString m_region; }; } // namespace Locale } // namespace CalamaresUtils #endif // LOCALE_TIMEZONE_H calamares-3.2.41.1/src/libcalamares/locale/TranslatableConfiguration.cpp000066400000000000000000000056071410275732300262210ustar00rootroot00000000000000/* === 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 "TranslatableConfiguration.h" #include "LabelModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include namespace CalamaresUtils { namespace Locale { TranslatedString::TranslatedString( const QString& key, const char* context ) : m_context( context ) { m_strings[ QString() ] = key; } TranslatedString::TranslatedString( const QString& string ) : TranslatedString( string, nullptr ) { } TranslatedString::TranslatedString( const QVariantMap& map, const QString& key, const char* context ) : m_context( context ) { // Get the un-decorated value for the key QString value = CalamaresUtils::getString( map, key ); m_strings[ QString() ] = value; for ( auto it = map.constBegin(); it != map.constEnd(); ++it ) { QString subkey = it.key(); if ( subkey == key ) { // Already obtained, above } else if ( subkey.startsWith( key ) ) { QRegularExpressionMatch match; if ( subkey.indexOf( QRegularExpression( "\\[([a-zA-Z_@]*)\\]" ), 0, &match ) > 0 ) { QString language = match.captured( 1 ); m_strings[ language ] = it.value().toString(); } } } } QString TranslatedString::get() const { return get( QLocale() ); } QString TranslatedString::get( const QLocale& locale ) const { 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 ) { localeName = QStringLiteral( "sr@latin" ); } if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } int index = localeName.indexOf( '@' ); if ( index > 0 ) { localeName.truncate( index ); if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } } index = localeName.indexOf( '_' ); if ( index > 0 ) { localeName.truncate( index ); if ( m_strings.contains( localeName ) ) { return m_strings[ localeName ]; } } // If we're given a context to work with, also try the same string in // the regular translation framework. const QString& s = m_strings[ QString() ]; if ( m_context ) { return QCoreApplication::translate( m_context, s.toLatin1().constData() ); } else { return s; } } } // namespace Locale } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/locale/TranslatableConfiguration.h000066400000000000000000000066571410275732300256740ustar00rootroot00000000000000/* === 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. * * */ /** @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 #include "DllMacro.h" #include #include #include namespace CalamaresUtils { namespace Locale { /** @brief A human-readable string from a configuration file * * The configuration files can contain human-readable strings, * but those need their own translations and are not supported * by QObject::tr or anything else. */ class DLLEXPORT TranslatedString { public: /** @brief Get all the translations connected to @p key * * Gets map[key] as the "untranslated" form, and then all the * keys of the form [lang] are taken as the translation * for of the untranslated form. * * If @p context is not a nullptr, then that is taken as an * indication to **also** use the regular QObject::tr() translation * mechanism for these strings. It is recommended to pass in * 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() ) { } /** @brief How many strings (translations) are there? * * This is always at least 1 (for the untranslated string), * but may be more than 1 even when isEmpty() is true -- * if there is no untranslated version, for instance. */ int count() const { return m_strings.count(); } /** @brief Consider this string empty? * * Only the state of the untranslated string is considered, * so count() may be more than 1 even while the string is empty. */ bool isEmpty() const { return m_strings[ QString() ].isEmpty(); } /// @brief Gets the string in the current locale QString get() const; /// @brief Gets the string from the given locale QString get( const QLocale& ) const; private: // Maps locale name to human-readable string, "" is English QMap< QString, QString > m_strings; const char* m_context = nullptr; }; } // namespace Locale } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/locale/TranslatableString.cpp000066400000000000000000000030241410275732300246470ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/locale/TranslatableString.h000066400000000000000000000031631410275732300243200ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/locale/ZoneData_p.cxxtr000066400000000000000000000435771410275732300234770ustar00rootroot00000000000000/* GENERATED FILE DO NOT EDIT * * 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: * * This file is in the public domain, so clarified as of * 2009-05-17 by Arthur David Olson. * * From Paul Eggert (2018-06-27): * This file is intended as a backward-compatibility aid for older programs. * New programs should use zone1970.tab. This file is like zone1970.tab (see * zone1970.tab's comments), but with the following additional restrictions: * * 1. This file contains only ASCII characters. * 2. The first data column contains exactly one country code. * */ /** 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. */ static const QStringList& tz_regions_table() { return QStringList { QObject::tr("Africa", "tz_regions"), QObject::tr("America", "tz_regions"), QObject::tr("Antarctica", "tz_regions"), QObject::tr("Arctic", "tz_regions"), QObject::tr("Asia", "tz_regions"), QObject::tr("Atlantic", "tz_regions"), QObject::tr("Australia", "tz_regions"), QObject::tr("Europe", "tz_regions"), QObject::tr("Indian", "tz_regions"), QObject::tr("Pacific", "tz_regions"), QString() }; } /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ static const QStringList& tz_names_table() { return QStringList { QObject::tr("Abidjan", "tz_names"), QObject::tr("Accra", "tz_names"), QObject::tr("Adak", "tz_names"), QObject::tr("Addis Ababa", "tz_names"), QObject::tr("Adelaide", "tz_names"), QObject::tr("Aden", "tz_names"), QObject::tr("Algiers", "tz_names"), QObject::tr("Almaty", "tz_names"), QObject::tr("Amman", "tz_names"), QObject::tr("Amsterdam", "tz_names"), QObject::tr("Anadyr", "tz_names"), QObject::tr("Anchorage", "tz_names"), QObject::tr("Andorra", "tz_names"), QObject::tr("Anguilla", "tz_names"), QObject::tr("Antananarivo", "tz_names"), QObject::tr("Antigua", "tz_names"), QObject::tr("Apia", "tz_names"), QObject::tr("Aqtau", "tz_names"), QObject::tr("Aqtobe", "tz_names"), QObject::tr("Araguaina", "tz_names"), QObject::tr("Argentina/Buenos Aires", "tz_names"), QObject::tr("Argentina/Catamarca", "tz_names"), QObject::tr("Argentina/Cordoba", "tz_names"), QObject::tr("Argentina/Jujuy", "tz_names"), QObject::tr("Argentina/La Rioja", "tz_names"), QObject::tr("Argentina/Mendoza", "tz_names"), QObject::tr("Argentina/Rio Gallegos", "tz_names"), QObject::tr("Argentina/Salta", "tz_names"), QObject::tr("Argentina/San Juan", "tz_names"), QObject::tr("Argentina/San Luis", "tz_names"), QObject::tr("Argentina/Tucuman", "tz_names"), QObject::tr("Argentina/Ushuaia", "tz_names"), QObject::tr("Aruba", "tz_names"), QObject::tr("Ashgabat", "tz_names"), QObject::tr("Asmara", "tz_names"), QObject::tr("Astrakhan", "tz_names"), QObject::tr("Asuncion", "tz_names"), QObject::tr("Athens", "tz_names"), QObject::tr("Atikokan", "tz_names"), QObject::tr("Atyrau", "tz_names"), QObject::tr("Auckland", "tz_names"), QObject::tr("Azores", "tz_names"), QObject::tr("Baghdad", "tz_names"), QObject::tr("Bahia", "tz_names"), QObject::tr("Bahia Banderas", "tz_names"), QObject::tr("Bahrain", "tz_names"), QObject::tr("Baku", "tz_names"), QObject::tr("Bamako", "tz_names"), QObject::tr("Bangkok", "tz_names"), QObject::tr("Bangui", "tz_names"), QObject::tr("Banjul", "tz_names"), QObject::tr("Barbados", "tz_names"), QObject::tr("Barnaul", "tz_names"), QObject::tr("Beirut", "tz_names"), QObject::tr("Belem", "tz_names"), QObject::tr("Belgrade", "tz_names"), QObject::tr("Belize", "tz_names"), QObject::tr("Berlin", "tz_names"), QObject::tr("Bermuda", "tz_names"), QObject::tr("Bishkek", "tz_names"), QObject::tr("Bissau", "tz_names"), QObject::tr("Blanc-Sablon", "tz_names"), QObject::tr("Blantyre", "tz_names"), QObject::tr("Boa Vista", "tz_names"), QObject::tr("Bogota", "tz_names"), QObject::tr("Boise", "tz_names"), QObject::tr("Bougainville", "tz_names"), QObject::tr("Bratislava", "tz_names"), QObject::tr("Brazzaville", "tz_names"), QObject::tr("Brisbane", "tz_names"), QObject::tr("Broken Hill", "tz_names"), QObject::tr("Brunei", "tz_names"), QObject::tr("Brussels", "tz_names"), QObject::tr("Bucharest", "tz_names"), QObject::tr("Budapest", "tz_names"), QObject::tr("Bujumbura", "tz_names"), QObject::tr("Busingen", "tz_names"), QObject::tr("Cairo", "tz_names"), QObject::tr("Cambridge Bay", "tz_names"), QObject::tr("Campo Grande", "tz_names"), QObject::tr("Canary", "tz_names"), QObject::tr("Cancun", "tz_names"), QObject::tr("Cape Verde", "tz_names"), QObject::tr("Caracas", "tz_names"), QObject::tr("Casablanca", "tz_names"), QObject::tr("Casey", "tz_names"), QObject::tr("Cayenne", "tz_names"), QObject::tr("Cayman", "tz_names"), QObject::tr("Ceuta", "tz_names"), QObject::tr("Chagos", "tz_names"), QObject::tr("Chatham", "tz_names"), QObject::tr("Chicago", "tz_names"), QObject::tr("Chihuahua", "tz_names"), QObject::tr("Chisinau", "tz_names"), QObject::tr("Chita", "tz_names"), QObject::tr("Choibalsan", "tz_names"), QObject::tr("Christmas", "tz_names"), QObject::tr("Chuuk", "tz_names"), QObject::tr("Cocos", "tz_names"), QObject::tr("Colombo", "tz_names"), QObject::tr("Comoro", "tz_names"), QObject::tr("Conakry", "tz_names"), QObject::tr("Copenhagen", "tz_names"), QObject::tr("Costa Rica", "tz_names"), QObject::tr("Creston", "tz_names"), QObject::tr("Cuiaba", "tz_names"), QObject::tr("Curacao", "tz_names"), QObject::tr("Currie", "tz_names"), QObject::tr("Dakar", "tz_names"), QObject::tr("Damascus", "tz_names"), QObject::tr("Danmarkshavn", "tz_names"), QObject::tr("Dar es Salaam", "tz_names"), QObject::tr("Darwin", "tz_names"), QObject::tr("Davis", "tz_names"), QObject::tr("Dawson", "tz_names"), QObject::tr("Dawson Creek", "tz_names"), QObject::tr("Denver", "tz_names"), QObject::tr("Detroit", "tz_names"), QObject::tr("Dhaka", "tz_names"), QObject::tr("Dili", "tz_names"), QObject::tr("Djibouti", "tz_names"), QObject::tr("Dominica", "tz_names"), QObject::tr("Douala", "tz_names"), QObject::tr("Dubai", "tz_names"), QObject::tr("Dublin", "tz_names"), QObject::tr("DumontDUrville", "tz_names"), QObject::tr("Dushanbe", "tz_names"), QObject::tr("Easter", "tz_names"), QObject::tr("Edmonton", "tz_names"), QObject::tr("Efate", "tz_names"), QObject::tr("Eirunepe", "tz_names"), QObject::tr("El Aaiun", "tz_names"), QObject::tr("El Salvador", "tz_names"), QObject::tr("Enderbury", "tz_names"), QObject::tr("Eucla", "tz_names"), QObject::tr("Fakaofo", "tz_names"), QObject::tr("Famagusta", "tz_names"), QObject::tr("Faroe", "tz_names"), QObject::tr("Fiji", "tz_names"), QObject::tr("Fort Nelson", "tz_names"), QObject::tr("Fortaleza", "tz_names"), QObject::tr("Freetown", "tz_names"), QObject::tr("Funafuti", "tz_names"), QObject::tr("Gaborone", "tz_names"), QObject::tr("Galapagos", "tz_names"), QObject::tr("Gambier", "tz_names"), QObject::tr("Gaza", "tz_names"), QObject::tr("Gibraltar", "tz_names"), QObject::tr("Glace Bay", "tz_names"), QObject::tr("Godthab", "tz_names"), QObject::tr("Goose Bay", "tz_names"), QObject::tr("Grand Turk", "tz_names"), QObject::tr("Grenada", "tz_names"), QObject::tr("Guadalcanal", "tz_names"), QObject::tr("Guadeloupe", "tz_names"), QObject::tr("Guam", "tz_names"), QObject::tr("Guatemala", "tz_names"), QObject::tr("Guayaquil", "tz_names"), QObject::tr("Guernsey", "tz_names"), QObject::tr("Guyana", "tz_names"), QObject::tr("Halifax", "tz_names"), QObject::tr("Harare", "tz_names"), QObject::tr("Havana", "tz_names"), QObject::tr("Hebron", "tz_names"), QObject::tr("Helsinki", "tz_names"), QObject::tr("Hermosillo", "tz_names"), QObject::tr("Ho Chi Minh", "tz_names"), QObject::tr("Hobart", "tz_names"), QObject::tr("Hong Kong", "tz_names"), QObject::tr("Honolulu", "tz_names"), QObject::tr("Hovd", "tz_names"), QObject::tr("Indiana/Indianapolis", "tz_names"), QObject::tr("Indiana/Knox", "tz_names"), QObject::tr("Indiana/Marengo", "tz_names"), QObject::tr("Indiana/Petersburg", "tz_names"), QObject::tr("Indiana/Tell City", "tz_names"), QObject::tr("Indiana/Vevay", "tz_names"), QObject::tr("Indiana/Vincennes", "tz_names"), QObject::tr("Indiana/Winamac", "tz_names"), QObject::tr("Inuvik", "tz_names"), QObject::tr("Iqaluit", "tz_names"), QObject::tr("Irkutsk", "tz_names"), QObject::tr("Isle of Man", "tz_names"), QObject::tr("Istanbul", "tz_names"), QObject::tr("Jakarta", "tz_names"), QObject::tr("Jamaica", "tz_names"), QObject::tr("Jayapura", "tz_names"), QObject::tr("Jersey", "tz_names"), QObject::tr("Jerusalem", "tz_names"), QObject::tr("Johannesburg", "tz_names"), QObject::tr("Juba", "tz_names"), QObject::tr("Juneau", "tz_names"), QObject::tr("Kabul", "tz_names"), QObject::tr("Kaliningrad", "tz_names"), QObject::tr("Kamchatka", "tz_names"), QObject::tr("Kampala", "tz_names"), QObject::tr("Karachi", "tz_names"), QObject::tr("Kathmandu", "tz_names"), QObject::tr("Kentucky/Louisville", "tz_names"), QObject::tr("Kentucky/Monticello", "tz_names"), QObject::tr("Kerguelen", "tz_names"), QObject::tr("Khandyga", "tz_names"), QObject::tr("Khartoum", "tz_names"), QObject::tr("Kiev", "tz_names"), QObject::tr("Kigali", "tz_names"), QObject::tr("Kinshasa", "tz_names"), QObject::tr("Kiritimati", "tz_names"), QObject::tr("Kirov", "tz_names"), QObject::tr("Kolkata", "tz_names"), QObject::tr("Kosrae", "tz_names"), QObject::tr("Kralendijk", "tz_names"), QObject::tr("Krasnoyarsk", "tz_names"), QObject::tr("Kuala Lumpur", "tz_names"), QObject::tr("Kuching", "tz_names"), QObject::tr("Kuwait", "tz_names"), QObject::tr("Kwajalein", "tz_names"), QObject::tr("La Paz", "tz_names"), QObject::tr("Lagos", "tz_names"), QObject::tr("Libreville", "tz_names"), QObject::tr("Lima", "tz_names"), QObject::tr("Lindeman", "tz_names"), QObject::tr("Lisbon", "tz_names"), QObject::tr("Ljubljana", "tz_names"), QObject::tr("Lome", "tz_names"), QObject::tr("London", "tz_names"), QObject::tr("Longyearbyen", "tz_names"), QObject::tr("Lord Howe", "tz_names"), QObject::tr("Los Angeles", "tz_names"), QObject::tr("Lower Princes", "tz_names"), QObject::tr("Luanda", "tz_names"), QObject::tr("Lubumbashi", "tz_names"), QObject::tr("Lusaka", "tz_names"), QObject::tr("Luxembourg", "tz_names"), QObject::tr("Macau", "tz_names"), QObject::tr("Maceio", "tz_names"), QObject::tr("Macquarie", "tz_names"), QObject::tr("Madeira", "tz_names"), QObject::tr("Madrid", "tz_names"), QObject::tr("Magadan", "tz_names"), QObject::tr("Mahe", "tz_names"), QObject::tr("Majuro", "tz_names"), QObject::tr("Makassar", "tz_names"), QObject::tr("Malabo", "tz_names"), QObject::tr("Maldives", "tz_names"), QObject::tr("Malta", "tz_names"), QObject::tr("Managua", "tz_names"), QObject::tr("Manaus", "tz_names"), QObject::tr("Manila", "tz_names"), QObject::tr("Maputo", "tz_names"), QObject::tr("Mariehamn", "tz_names"), QObject::tr("Marigot", "tz_names"), QObject::tr("Marquesas", "tz_names"), QObject::tr("Martinique", "tz_names"), QObject::tr("Maseru", "tz_names"), QObject::tr("Matamoros", "tz_names"), QObject::tr("Mauritius", "tz_names"), QObject::tr("Mawson", "tz_names"), QObject::tr("Mayotte", "tz_names"), QObject::tr("Mazatlan", "tz_names"), QObject::tr("Mbabane", "tz_names"), QObject::tr("McMurdo", "tz_names"), QObject::tr("Melbourne", "tz_names"), QObject::tr("Menominee", "tz_names"), QObject::tr("Merida", "tz_names"), QObject::tr("Metlakatla", "tz_names"), QObject::tr("Mexico City", "tz_names"), QObject::tr("Midway", "tz_names"), QObject::tr("Minsk", "tz_names"), QObject::tr("Miquelon", "tz_names"), QObject::tr("Mogadishu", "tz_names"), QObject::tr("Monaco", "tz_names"), QObject::tr("Moncton", "tz_names"), QObject::tr("Monrovia", "tz_names"), QObject::tr("Monterrey", "tz_names"), QObject::tr("Montevideo", "tz_names"), QObject::tr("Montserrat", "tz_names"), QObject::tr("Moscow", "tz_names"), QObject::tr("Muscat", "tz_names"), QObject::tr("Nairobi", "tz_names"), QObject::tr("Nassau", "tz_names"), QObject::tr("Nauru", "tz_names"), QObject::tr("Ndjamena", "tz_names"), QObject::tr("New York", "tz_names"), QObject::tr("Niamey", "tz_names"), QObject::tr("Nicosia", "tz_names"), QObject::tr("Nipigon", "tz_names"), QObject::tr("Niue", "tz_names"), QObject::tr("Nome", "tz_names"), QObject::tr("Norfolk", "tz_names"), QObject::tr("Noronha", "tz_names"), QObject::tr("North Dakota/Beulah", "tz_names"), QObject::tr("North Dakota/Center", "tz_names"), QObject::tr("North Dakota/New Salem", "tz_names"), QObject::tr("Nouakchott", "tz_names"), QObject::tr("Noumea", "tz_names"), QObject::tr("Novokuznetsk", "tz_names"), QObject::tr("Novosibirsk", "tz_names"), QObject::tr("Ojinaga", "tz_names"), QObject::tr("Omsk", "tz_names"), QObject::tr("Oral", "tz_names"), QObject::tr("Oslo", "tz_names"), QObject::tr("Ouagadougou", "tz_names"), QObject::tr("Pago Pago", "tz_names"), QObject::tr("Palau", "tz_names"), QObject::tr("Palmer", "tz_names"), QObject::tr("Panama", "tz_names"), QObject::tr("Pangnirtung", "tz_names"), QObject::tr("Paramaribo", "tz_names"), QObject::tr("Paris", "tz_names"), QObject::tr("Perth", "tz_names"), QObject::tr("Phnom Penh", "tz_names"), QObject::tr("Phoenix", "tz_names"), QObject::tr("Pitcairn", "tz_names"), QObject::tr("Podgorica", "tz_names"), QObject::tr("Pohnpei", "tz_names"), QObject::tr("Pontianak", "tz_names"), QObject::tr("Port Moresby", "tz_names"), QObject::tr("Port of Spain", "tz_names"), QObject::tr("Port-au-Prince", "tz_names"), QObject::tr("Porto Velho", "tz_names"), QObject::tr("Porto-Novo", "tz_names"), QObject::tr("Prague", "tz_names"), QObject::tr("Puerto Rico", "tz_names"), QObject::tr("Punta Arenas", "tz_names"), QObject::tr("Pyongyang", "tz_names"), QObject::tr("Qatar", "tz_names"), QObject::tr("Qostanay", "tz_names"), QObject::tr("Qyzylorda", "tz_names"), QObject::tr("Rainy River", "tz_names"), QObject::tr("Rankin Inlet", "tz_names"), QObject::tr("Rarotonga", "tz_names"), QObject::tr("Recife", "tz_names"), QObject::tr("Regina", "tz_names"), QObject::tr("Resolute", "tz_names"), QObject::tr("Reunion", "tz_names"), QObject::tr("Reykjavik", "tz_names"), QObject::tr("Riga", "tz_names"), QObject::tr("Rio Branco", "tz_names"), QObject::tr("Riyadh", "tz_names"), QObject::tr("Rome", "tz_names"), QObject::tr("Rothera", "tz_names"), QObject::tr("Saipan", "tz_names"), QObject::tr("Sakhalin", "tz_names"), QObject::tr("Samara", "tz_names"), QObject::tr("Samarkand", "tz_names"), QObject::tr("San Marino", "tz_names"), QObject::tr("Santarem", "tz_names"), QObject::tr("Santiago", "tz_names"), QObject::tr("Santo Domingo", "tz_names"), QObject::tr("Sao Paulo", "tz_names"), QObject::tr("Sao Tome", "tz_names"), QObject::tr("Sarajevo", "tz_names"), QObject::tr("Saratov", "tz_names"), QObject::tr("Scoresbysund", "tz_names"), QObject::tr("Seoul", "tz_names"), QObject::tr("Shanghai", "tz_names"), QObject::tr("Simferopol", "tz_names"), QObject::tr("Singapore", "tz_names"), QObject::tr("Sitka", "tz_names"), QObject::tr("Skopje", "tz_names"), QObject::tr("Sofia", "tz_names"), QObject::tr("South Georgia", "tz_names"), QObject::tr("Srednekolymsk", "tz_names"), QObject::tr("St Barthelemy", "tz_names"), QObject::tr("St Helena", "tz_names"), QObject::tr("St Johns", "tz_names"), QObject::tr("St Kitts", "tz_names"), QObject::tr("St Lucia", "tz_names"), QObject::tr("St Thomas", "tz_names"), QObject::tr("St Vincent", "tz_names"), QObject::tr("Stanley", "tz_names"), QObject::tr("Stockholm", "tz_names"), QObject::tr("Swift Current", "tz_names"), QObject::tr("Sydney", "tz_names"), QObject::tr("Syowa", "tz_names"), QObject::tr("Tahiti", "tz_names"), QObject::tr("Taipei", "tz_names"), QObject::tr("Tallinn", "tz_names"), QObject::tr("Tarawa", "tz_names"), QObject::tr("Tashkent", "tz_names"), QObject::tr("Tbilisi", "tz_names"), QObject::tr("Tegucigalpa", "tz_names"), QObject::tr("Tehran", "tz_names"), QObject::tr("Thimphu", "tz_names"), QObject::tr("Thule", "tz_names"), QObject::tr("Thunder Bay", "tz_names"), QObject::tr("Tijuana", "tz_names"), QObject::tr("Tirane", "tz_names"), QObject::tr("Tokyo", "tz_names"), QObject::tr("Tomsk", "tz_names"), QObject::tr("Tongatapu", "tz_names"), QObject::tr("Toronto", "tz_names"), QObject::tr("Tortola", "tz_names"), QObject::tr("Tripoli", "tz_names"), QObject::tr("Troll", "tz_names"), QObject::tr("Tunis", "tz_names"), QObject::tr("Ulaanbaatar", "tz_names"), QObject::tr("Ulyanovsk", "tz_names"), QObject::tr("Urumqi", "tz_names"), QObject::tr("Ust-Nera", "tz_names"), QObject::tr("Uzhgorod", "tz_names"), QObject::tr("Vaduz", "tz_names"), QObject::tr("Vancouver", "tz_names"), QObject::tr("Vatican", "tz_names"), QObject::tr("Vienna", "tz_names"), QObject::tr("Vientiane", "tz_names"), QObject::tr("Vilnius", "tz_names"), QObject::tr("Vladivostok", "tz_names"), QObject::tr("Volgograd", "tz_names"), QObject::tr("Vostok", "tz_names"), QObject::tr("Wake", "tz_names"), QObject::tr("Wallis", "tz_names"), QObject::tr("Warsaw", "tz_names"), QObject::tr("Whitehorse", "tz_names"), QObject::tr("Windhoek", "tz_names"), QObject::tr("Winnipeg", "tz_names"), QObject::tr("Yakutat", "tz_names"), QObject::tr("Yakutsk", "tz_names"), QObject::tr("Yangon", "tz_names"), QObject::tr("Yekaterinburg", "tz_names"), QObject::tr("Yellowknife", "tz_names"), QObject::tr("Yerevan", "tz_names"), QObject::tr("Zagreb", "tz_names"), QObject::tr("Zaporozhye", "tz_names"), QObject::tr("Zurich", "tz_names"), QString() }; } calamares-3.2.41.1/src/libcalamares/locale/cldr-extractor.py000066400000000000000000000212151410275732300236510ustar00rootroot00000000000000#! /usr/bin/env python3 # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # """ Python3 script to scrape some data out of ICU CLDR supplemental data. To use this script, you must have downloaded the CLDR data, e.g. http://unicode.org/Public/cldr/35.1/, and extracted the zip file. Run the script from **inside** the common/ durectory that is created (or fix the hard-coded path). The script tries to print C++ code that compiles; if there are encoding problems, it will print some kind of representation of the problematic lines. To avoid having to cross-reference multiple XML files, the script cheats: it reads the comments as well to get names. So it looks for pairs of lines like this: It extracts the 2-character country code "BQ" from the sub-tag, and parses the comment to get a language and country name (instead of looking up "pap" and "BQ" in other tables). This may be considered a hack. A large collection of exceptions can be found in the two *_mapper tables, which massage the CLDR names to Qt enum values. """ # ### END USAGE import sys # These are languages listed in CLDR that don't match # the enum-values in QLocale::Language. language_mapper = { "?" : "AnyLanguage", "Bangla" : "Bengali", "Kalaallisut" : "Greenlandic", "Haitian Creole" : "Haitian", "Kyrgyz" : "Kirghiz", "Norwegian Bokmål" : "NorwegianBokmal", "Tokelau" : "TokelauLanguage", "Tuvalu" : "TuvaluLanguage", } country_mapper = { "Åland Islands" : "AlandIslands", "St. Barthélemy" : "SaintBarthelemy", "Côte d’Ivoire" : "IvoryCoast", "Curaçao" : "CuraSao", "Réunion" : "Reunion", "São Tomé & Príncipe" : "SaoTomeAndPrincipe", "Bosnia & Herzegovina" : "BosniaAndHerzegowina", "Czechia" : "CzechRepublic", "St. Pierre & Miquelon" : "SaintPierreAndMiquelon", "Vatican City" : "VaticanCityState", "South Georgia & South Sandwich Islands" : "SouthGeorgiaAndTheSouthSandwichIslands", "Timor-Leste" : "EastTimor", "Wallis & Futuna" : "WallisAndFutunaIslands", "Myanmar (Burma)" : "Myanmar", "Svalbard & Jan Mayen" : "SvalbardAndJanMayenIslands", "St. Martin" : "SaintMartin", "North Macedonia" : "Macedonia", "Hong Kong SAR China" : "HongKong", "Macao SAR China" : "Macau", "Eurozone" : "AnyCountry", # Not likely for GeoIP "Caribbean Netherlands" : "Bonaire", # Bonaire, Saba, St.Eustatius } class CountryData: def __init__(self, country_code, language_name, country_name): """ Takes a 2-letter country name, and enum names from QLocale::Language and QLocale::Country. An empty @p country code is acceptable, for the terminating entry in the data array (and yields a 0,0 code). """ if country_code: assert len(country_code) == 2 self.country_code = country_code self.language_enum = language_name self.country_enum = country_name else: 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]) char1 = "'{!s}'".format(self.country_code[1]) else: char0 = "0" char1 = "0" return "{!s} QLocale::Language::{!s}, QLocale::Country::{!s}, {!s}, {!s} {!s},".format( "{", self.language_enum, self.country_enum, char0, char1, "}") # Must match type name below cpp_classname = "CountryData" # Must match the output format of __str__ above cpp_declaration = """ struct CountryData { QLocale::Language l; QLocale::Country c; char cc1; char cc2; }; """ def extricate_subtags(l1, l2): """ Given two lines @p l1 and @p l2 which are the element-line and the comment-line underneath it, return a CountryData for them, or None if the two lines are not relevant (e.g. not the right subtag from, or 3-letter country codes. """ if 'from="und_' not in l1: 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) def read_subtags_file(): """ Returns a list of CountryData objects from the likelySubtags file. """ data = [] with open("supplemental/likelySubtags.xml", "rt", encoding="UTF-8") as f: l1 = "a line" while l1: l1 = f.readline() if ' === * * SPDX-FileCopyrightText: 1991-2019 Unicode, Inc. * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: CC0 * * 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. * B. Definitions * 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. */ // BEGIN Generated from CLDR data // *INDENT-OFF* // clang-format off """ cpp_footer_comment = """ // END Generated from CLDR data """ def make_identifier(classname): """ Given a class name (e.g. CountryData) return an identifer for the data-table for that class. """ identifier = [ classname[0].lower() ] for c in classname[1:]: if c.isupper(): identifier.extend(["_", c.lower()]) else: identifier.append(c) return "".join(identifier) def export_class(cls, data): """ Given a @p cls and a list of @p data objects from that class, print (to stdout) a C++ file for that data. """ identifier = make_identifier(cls.cpp_classname) with open("{!s}_p.cpp".format(cls.cpp_classname), "wt", encoding="UTF-8") as f: f.write(cpp_header_comment) f.write(cls.cpp_declaration) f.write("\nstatic constexpr int const {!s}_size = {!s};\n".format( identifier, len(data))) f.write("\nstatic const {!s} {!s}_table[] = {!s}\n".format( cls.cpp_classname, identifier, "{")) for d in data: f.write(str(d)) f.write("\n") f.write("};\n\n"); f.write("static_assert( (sizeof({!s}_table) / sizeof({!s})) == {!s}_size, \"Table size mismatch for {!s}\" );\n\n".format( identifier, cls.cpp_classname, identifier, cls.cpp_classname)) f.write(cpp_footer_comment) if __name__ == "__main__": export_class(CountryData, read_subtags_file()) calamares-3.2.41.1/src/libcalamares/locale/zone-extractor.py000066400000000000000000000051721410275732300237040ustar00rootroot00000000000000#! /usr/bin/env python3 # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: BSD-2-Clause # """ Python3 script to scrape some data out of zoneinfo/zone.tab. To use this script, you must have a zone.tab in a standard location, /usr/share/zoneinfo/zone.tab (this is usual on FreeBSD and Linux). Prints out a few tables of zone names for use in translations. """ def scrape_file(file, regionset, zoneset): for line in file.readlines(): if line.startswith("#"): continue parts = line.split("\t") if len(parts) < 3: continue zoneid = parts[2] if not "/" in zoneid: continue region, zone = zoneid.split("/", 1) zone = zone.strip().replace("_", " ") regionset.add(region) assert(zone not in zoneset) zoneset.add(zone) 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("static const QStringList& {!s}_table()\n{{\n\treturn QStringList {{\n".format(label)) for x in sorted(set): file.write("""\t\tQObject::tr("{!s}", "{!s}"),\n""".format(x, label)) file.write("\t\tQString()\n\t};\n}\n\n") cpp_header_comment = """/* 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: * * This file is in the public domain, so clarified as of * 2009-05-17 by Arthur David Olson. * * From Paul Eggert (2018-06-27): * This file is intended as a backward-compatibility aid for older programs. * New programs should use zone1970.tab. This file is like zone1970.tab (see * zone1970.tab's comments), but with the following additional restrictions: * * 1. This file contains only ASCII characters. * 2. The first data column contains exactly one country code. * */ /** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ // *INDENT-OFF* // clang-format off """ if __name__ == "__main__": regions=set() zones=set() with open("/usr/share/zoneinfo/zone.tab", "r") as f: scrape_file(f, regions, zones) with open("ZoneData_p.cpp", "w") as f: f.write(cpp_header_comment) write_set(f, "tz_regions", regions) write_set(f, "tz_names", zones) calamares-3.2.41.1/src/libcalamares/modulesystem/000077500000000000000000000000001410275732300216345ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/modulesystem/Actions.h000066400000000000000000000010461410275732300234060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef MODULESYSTEM_ACTIONS_H #define MODULESYSTEM_ACTIONS_H namespace Calamares { namespace ModuleSystem { enum class Action : char { Show, Exec }; } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/Config.cpp000066400000000000000000000063671410275732300235610ustar00rootroot00000000000000/* === 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 "Preset.h" #include "utils/Logger.h" #include "utils/Variant.h" namespace Calamares { namespace ModuleSystem { class Config::Private { public: std::unique_ptr< Presets > m_presets; }; Config::Config( QObject* parent ) : QObject( parent ) , d( std::make_unique< Private >() ) { } Config::~Config() {} bool Config::isEditable( const QString& fieldName ) const { if ( m_unlocked ) { return true; } if ( d && d->m_presets ) { return d->m_presets->isEditable( fieldName ); } else { cWarning() << "Checking isEditable, but no presets are configured."; } return true; } Config::ApplyPresets::ApplyPresets( Calamares::ModuleSystem::Config& c, const QVariantMap& configurationMap ) : m_c( c ) , m_bogus( true ) , m_map( CalamaresUtils::getSubMap( configurationMap, "presets", m_bogus ) ) { c.m_unlocked = true; if ( !c.d->m_presets ) { c.d->m_presets = std::make_unique< Presets >(); } } Config::ApplyPresets::~ApplyPresets() { m_c.m_unlocked = false; // Check that there's no **settings** (from the configuration map) // that have not been consumed by apply() -- if they are there, // that means the configuration map specifies things that the // Config object does not expect. bool haveWarned = false; for ( const auto& k : m_map.keys() ) { if ( !m_c.d->m_presets->find( k ).isValid() ) { if ( !haveWarned ) { cWarning() << "Preset configuration contains unused keys"; haveWarned = true; } cDebug() << Logger::SubEntry << "Unused key" << k; } } } Config::ApplyPresets& Config::ApplyPresets::apply( const char* fieldName ) { const auto prop = m_c.property( fieldName ); if ( !prop.isValid() ) { cWarning() << "Applying invalid property" << fieldName; return *this; } const QString key( fieldName ); if ( key.isEmpty() ) { cWarning() << "Applying empty field"; return *this; } if ( m_c.d->m_presets->find( key ).isValid() ) { cWarning() << "Applying duplicate property" << fieldName; return *this; } if ( m_map.contains( key ) ) { // Key has an explicit setting QVariantMap m = CalamaresUtils::getSubMap( m_map, key, m_bogus ); QVariant value = m[ "value" ]; bool editable = CalamaresUtils::getBool( m, "editable", true ); if ( value.isValid() ) { m_c.setProperty( fieldName, value ); } m_c.d->m_presets->append( PresetField { key, value, editable } ); } else { // There is no setting, but since we apply() this field, // we do know about it; put in a preset so that looking // it up won't complani. m_c.d->m_presets->append( PresetField { key, QVariant(), true } ); } return *this; } } // namespace ModuleSystem } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/Config.h000066400000000000000000000114721410275732300232170ustar00rootroot00000000000000/* === 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 CALAMARES_MODULESYSTEM_CONFIG_H #define CALAMARES_MODULESYSTEM_CONFIG_H #include "DllMacro.h" #include #include #include #include namespace Calamares { namespace ModuleSystem { /** @brief Base class for Config-objects * * This centralizes the things every Config-object should * do and provides one source of preset-data. A Config-object * for a module can **optionally** inherit from this class * to get presets-support. * * TODO:3.3 This is not optional * TODO:3.3 Put consistent i18n for Configurations in here too */ class DLLEXPORT Config : public QObject { Q_OBJECT public: Config( QObject* parent = nullptr ); ~Config() override; /** @brief Set the configuration from the config file * * Subclasses must implement this to load configuration data; * that subclass **should** also call loadPresets() with the * same map, to pick up the "presets" key consistently. */ virtual void setConfigurationMap( const QVariantMap& ) = 0; public Q_SLOTS: /** @brief Checks if a @p fieldName is editable according to presets * * If the field is named as a preset, **and** the field is set * to not-editable, returns @c false. Otherwise, return @c true. * Calling this with an unknown field (one for which no presets * are accepted) will print a warning and return @c true. * * @see CONFIG_PREVENT_EDITING * * Most setters will call isEditable() to check if the field should * be editable. Do not count on the setter not being called: the * UI might not have set the field to fixed / constant / not-editable * and then you can have the setter called by changes in the UI. * * To prevent the UI from changing **and** to make sure that the UI * reflects the unchanged value (rather than the changed value it * sent to the Config object), use CONFIG_PREVENT_EDITING, like so: * * CONFIG_PREVENT_EDITING( type, "propertyName" ); * * The ; is necessary. is the type of the property; for instance * QString. The name of the property is a (constant) string. The * macro will return (out of the setter it is used in) if the field * is not editable, and will send a notification event with the old * value as soon as the event loop resumes. */ bool isEditable( const QString& fieldName ) const; protected: friend class ApplyPresets; /** @brief "Builder" class for presets * * Derived classes should instantiate this (with themselves, * and the whole configuration map that is passed to * setConfigurationMap()) and then call .apply() to apply * the presets specified in the configuration to the **named** * QObject properties. */ class ApplyPresets { public: /** @brief Create a preset-applier for this config * * The @p configurationMap should be the one passed in to * setConfigurationMap() . Presets are extracted from the * standard key *presets* and can be applied to the configuration * with apply() or operator<<. */ ApplyPresets( Config& c, const QVariantMap& configurationMap ); ~ApplyPresets(); /** @brief Add a preset for the given @p fieldName * * This checks for preset-entries in the configuration map that was * passed in to the constructor. */ ApplyPresets& apply( const char* fieldName ); /** @brief Alternate way of writing apply() */ ApplyPresets& operator<<( const char* fieldName ) { return apply( fieldName ); } private: Config& m_c; bool m_bogus = true; const QVariantMap m_map; }; private: class Private; std::unique_ptr< Private > d; bool m_unlocked = false; }; } // namespace ModuleSystem } // namespace Calamares /// @see Config::isEditable() // // This needs to be a macro, because Q_ARG() is a macro that stringifies // the type name. #define CONFIG_PREVENT_EDITING( type, fieldName ) \ do \ { \ if ( !isEditable( QStringLiteral( fieldName ) ) ) \ { \ auto prop = property( fieldName ); \ const auto& metaobject = metaObject(); \ auto metaprop = metaobject->property( metaobject->indexOfProperty( fieldName ) ); \ if ( metaprop.hasNotifySignal() ) \ { \ metaprop.notifySignal().invoke( this, Qt::QueuedConnection, Q_ARG( type, prop.value< type >() ) ); \ } \ return; \ } \ } while ( 0 ) #endif calamares-3.2.41.1/src/libcalamares/modulesystem/Descriptor.cpp000066400000000000000000000105121410275732300244550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "Descriptor.h" #include "utils/Logger.h" #include "utils/Variant.h" namespace Calamares { namespace ModuleSystem { const NamedEnumTable< Type >& typeNames() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< Type > table{ { QStringLiteral( "job" ), Type::Job }, { QStringLiteral( "view" ), Type::View }, { QStringLiteral( "viewmodule" ), Type::View }, { QStringLiteral( "jobmodule" ), Type::Job } }; // *INDENT-ON* // clang-format on return table; } const NamedEnumTable< Interface >& interfaceNames() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< Interface > table { { QStringLiteral("process"), Interface::Process }, { QStringLiteral("qtplugin"), Interface::QtPlugin }, { QStringLiteral("python"), Interface::Python }, { QStringLiteral("pythonqt"), Interface::PythonQt } }; // *INDENT-ON* // clang-format on return table; } Descriptor::Descriptor() {} Descriptor Descriptor::fromDescriptorData( const QVariantMap& moduleDesc ) { Descriptor d; { bool typeOk = false; QString typeValue = moduleDesc.value( "type" ).toString(); Type t = typeNames().find( typeValue, typeOk ); if ( !typeOk ) { cWarning() << "Module descriptor contains invalid *type*" << typeValue; } bool interfaceOk = false; QString interfaceValue = moduleDesc.value( "interface" ).toString(); Interface i = interfaceNames().find( interfaceValue, interfaceOk ); if ( !interfaceOk ) { cWarning() << "Module descriptor contains invalid *interface*" << interfaceValue; } d.m_name = moduleDesc.value( "name" ).toString(); if ( typeOk && interfaceOk && !d.m_name.isEmpty() ) { d.m_type = t; d.m_interface = i; d.m_isValid = true; } } if ( !d.m_isValid ) { return d; } d.m_isEmergeny = CalamaresUtils::getBool( moduleDesc, "emergency", false ); d.m_hasConfig = !CalamaresUtils::getBool( moduleDesc, "noconfig", false ); // Inverted logic during load d.m_requiredModules = CalamaresUtils::getStringList( moduleDesc, "requiredModules" ); d.m_weight = int( CalamaresUtils::getInteger( moduleDesc, "weight", -1 ) ); QStringList consumedKeys { "type", "interface", "name", "emergency", "noconfig", "requiredModules", "weight" }; switch ( d.interface() ) { case Interface::QtPlugin: d.m_script = CalamaresUtils::getString( moduleDesc, "load" ); consumedKeys << "load"; break; case Interface::Python: case Interface::PythonQt: d.m_script = CalamaresUtils::getString( moduleDesc, "script" ); if ( d.m_script.isEmpty() ) { cWarning() << "Module descriptor contains no *script*" << d.name(); d.m_isValid = false; } consumedKeys << "script"; break; case Interface::Process: d.m_script = CalamaresUtils::getString( moduleDesc, "command" ); d.m_processTimeout = int( CalamaresUtils::getInteger( moduleDesc, "timeout", 30 ) ); d.m_processChroot = CalamaresUtils::getBool( moduleDesc, "chroot", false ); if ( d.m_processTimeout < 0 ) { d.m_processTimeout = 0; } if ( d.m_script.isEmpty() ) { cWarning() << "Module descriptor contains no *script*" << d.name(); d.m_isValid = false; } consumedKeys << "command" << "timeout" << "chroot"; break; } if ( !d.m_isValid ) { return d; } QStringList superfluousKeys; for ( auto kv = moduleDesc.keyBegin(); kv != moduleDesc.keyEnd(); ++kv ) { if ( !consumedKeys.contains( *kv ) ) { superfluousKeys << *kv; } } if ( !superfluousKeys.isEmpty() ) { cWarning() << "Module descriptor contains extra keys:" << Logger::DebugList( superfluousKeys ); d.m_isValid = false; } return d; } } // namespace ModuleSystem } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/Descriptor.h000066400000000000000000000103001410275732300241150ustar00rootroot00000000000000/* === 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 MODULESYSTEM_DESCRIPTOR_H #define MODULESYSTEM_DESCRIPTOR_H #include "utils/NamedEnum.h" #include namespace Calamares { namespace ModuleSystem { /** * @brief The Type enum represents the intended functionality of the module * Every module is either a job module or a view module. * A job module is a single Calamares job. * A view module has a UI (one or more view pages) and zero-to-many jobs. */ enum class Type { Job, View }; const NamedEnumTable< Type >& typeNames(); /** * @brief The Interface enum represents the interface through which the module * talks to Calamares. * Not all Type-Interface associations are valid. */ enum class Interface { QtPlugin, // Jobs or Views Python, // Jobs only Process, // Deprecated interface PythonQt // Views only, available as enum even if PythonQt isn't used }; const NamedEnumTable< Interface >& interfaceNames(); /* While this isn't a useful *using* right now, the intention is * to create a more strongly-typed Module Descriptor that carries * only the necessary information and no variants. */ class Descriptor { public: ///@brief an invalid, and empty, descriptor Descriptor(); /** @brief Fills a descriptor from the loaded (YAML) data. * */ static Descriptor fromDescriptorData( const QVariantMap& moduleDesc ); bool isValid() const { return m_isValid; } QString name() const { return m_name; } Type type() const { return m_type; } Interface interface() const { return m_interface; } bool isEmergency() const { return m_isEmergeny; } bool hasConfig() const { return m_hasConfig; } int weight() const { return m_weight < 1 ? 1 : m_weight; } bool explicitWeight() const { return m_weight > 0; } /// @brief The directory where the module.desc lives QString directory() const { return m_directory; } void setDirectory( const QString& d ) { m_directory = d; } const QStringList& requiredModules() const { return m_requiredModules; } /** @section C++ Modules * * The C++ modules are the most general, and are loaded as * a shared library after which a suitable factory creates * objects from them. */ /// @brief Short path to the shared-library; no extension. QString load() const { return m_interface == Interface::QtPlugin ? m_script : QString(); } /** @section Process Job modules * * Process Jobs are somewhat deprecated in favor of shellprocess * and contextualprocess jobs, since those handle multiple configuration * much more gracefully. * * Process Jobs execute one command. */ /// @brief The command to execute; passed to the shell QString command() const { return m_interface == Interface::Process ? m_script : QString(); } /// @brief Timeout in seconds int timeout() const { return m_processTimeout; } /// @brief Run command in chroot? bool chroot() const { return m_processChroot; } /** @section Python Job modules * * Python job modules have one specific script to load and run. */ QString script() const { return ( m_interface == Interface::Python || m_interface == Interface::PythonQt ) ? m_script : QString(); } private: QString m_name; QString m_directory; QStringList m_requiredModules; int m_weight = -1; Type m_type; Interface m_interface; bool m_isValid = false; bool m_isEmergeny = false; bool m_hasConfig = true; /** @brief The name of the thing to load * * - A C++ module loads a shared library (via key *load*), * - A Python module loads a Python script (via key *script*), * - A process runs a specific command (via key *command*) * * This name-of-the-thing is stored here, regardless of which * interface is being used. */ QString m_script; int m_processTimeout = 30; bool m_processChroot = false; }; } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/InstanceKey.cpp000066400000000000000000000016271410275732300245630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #include "InstanceKey.h" namespace Calamares { namespace ModuleSystem { InstanceKey InstanceKey::fromString( const QString& s ) { QStringList moduleEntrySplit = s.split( '@' ); if ( moduleEntrySplit.length() < 1 || moduleEntrySplit.length() > 2 ) { return InstanceKey(); } // For length 1, first == last return InstanceKey( moduleEntrySplit.first(), moduleEntrySplit.last() ); } QDebug& operator<<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ) { return s << i.toString(); } } // namespace ModuleSystem } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/InstanceKey.h000066400000000000000000000047731410275732300242350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #ifndef MODULESYSTEM_INSTANCEKEY_H #define MODULESYSTEM_INSTANCEKEY_H #include #include #include #include namespace Calamares { namespace ModuleSystem { /** @brief A module instance's key (`module@id`) * * A module instance is identified by both the module's name * (a Calamares module, e.g. `users`) and an instance id. * Usually, the instance id is the same as the module name * and the whole module instance key is `users@users`, but * it is possible to use the same module more than once * and then you distinguish those module instances by their * secondary id (e.g. `users@one`). * * This is supported by the *instances* configuration entry * in `settings.conf`. */ class InstanceKey : public QPair< QString, QString > { public: /// @brief Create an instance key from explicit module and id. InstanceKey( const QString& module, const QString& id ) : QPair( module, id ) { if ( second.isEmpty() ) { second = first; } validate(); } /// @brief Create unusual, invalid instance key InstanceKey() : QPair( QString(), QString() ) { } /// @brief A valid module has both name and id bool isValid() const { return !first.isEmpty() && !second.isEmpty(); } /// @brief A custom module has a non-default id bool isCustom() const { return first != second; } QString module() const { return first; } QString id() const { return second; } /// @brief Create instance key from stringified version static InstanceKey fromString( const QString& s ); QString toString() const { if ( isValid() ) { return first + '@' + second; } return QString(); } private: /** @brief Check validity and reset module and id if needed. */ void validate() { if ( first.contains( '@' ) || second.contains( '@' ) ) { first = QString(); second = QString(); } } }; using InstanceKeyList = QList< InstanceKey >; QDebug& operator<<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ); } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/Module.cpp000066400000000000000000000103251410275732300235660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #include "Module.h" #include "CalamaresConfig.h" #include "Settings.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" #include #include #include #include static const char EMERGENCY[] = "emergency"; namespace Calamares { Module::Module() : m_loaded( false ) { } Module::~Module() {} void Module::initFrom( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, const QString& id ) { m_key = ModuleSystem::InstanceKey( moduleDescriptor.name(), id ); if ( moduleDescriptor.isEmergency() ) { m_maybe_emergency = true; } } static QStringList moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, const QString& configFileName ) { QStringList paths; if ( CalamaresUtils::isAppDataDirOverridden() ) { paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) ); } else { // If an absolute path is given, in debug mode, look for it // first. The case contains('/'), below, will add the absolute // path a second time, though. if ( assumeBuildDir && configFileName.startsWith( '/' ) ) { paths << configFileName; } if ( assumeBuildDir ) { paths << QDir().absoluteFilePath( QString( "src/modules/%1/%2" ).arg( moduleName ).arg( configFileName ) ); } if ( assumeBuildDir && configFileName.contains( '/' ) ) { paths << QDir().absoluteFilePath( configFileName ); } if ( CalamaresUtils::haveExtraDirs() ) for ( auto s : CalamaresUtils::extraConfigDirs() ) { paths << ( s + QString( "modules/%1" ).arg( configFileName ) ); } paths << QString( "/etc/calamares/modules/%1" ).arg( configFileName ); paths << CalamaresUtils::appDataDir().absoluteFilePath( QString( "modules/%1" ).arg( configFileName ) ); } return paths; } void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception { QStringList configCandidates = moduleConfigurationCandidates( Settings::instance()->debugMode(), name(), configFileName ); for ( const QString& path : configCandidates ) { QFile configFile( path ); if ( configFile.exists() && configFile.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = configFile.readAll(); YAML::Node doc = YAML::Load( ba.constData() ); if ( doc.IsNull() ) { cDebug() << "Found empty module configuration" << path; // Special case: empty config files are valid, // but aren't a map. return; } if ( !doc.IsMap() ) { cWarning() << "Bad module configuration format" << path; return; } cDebug() << "Loaded module configuration" << path; m_configurationMap = CalamaresUtils::yamlMapToVariant( doc ); m_emergency = m_maybe_emergency && m_configurationMap.contains( EMERGENCY ) && m_configurationMap[ EMERGENCY ].toBool(); return; } } cDebug() << "No config file for" << name() << "found anywhere at" << Logger::DebugList( configCandidates ); } QString Module::typeString() const { bool ok = false; QString v = Calamares::ModuleSystem::typeNames().find( type(), ok ); return ok ? v : QString(); } QString Module::interfaceString() const { bool ok = false; QString v = Calamares::ModuleSystem::interfaceNames().find( interface(), ok ); return ok ? v : QString(); } QVariantMap Module::configurationMap() { return m_configurationMap; } RequirementsList Module::checkRequirements() { return RequirementsList(); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/Module.h000066400000000000000000000122651410275732300232400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef CALAMARES_MODULE_H #define CALAMARES_MODULE_H #include "DllMacro.h" #include "Job.h" #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include "modulesystem/Requirement.h" #include #include namespace Calamares { class Module; Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); /** * @brief The Module class is a common supertype for Calamares modules. * It enforces a common interface for all the different types of modules, and it * takes care of creating an object of the correct type starting from a module * descriptor structure. */ class DLLEXPORT Module { public: using Type = ModuleSystem::Type; using Interface = ModuleSystem::Interface; virtual ~Module(); /** * @brief name returns the name of this module. * @return a string with this module's name. */ QString name() const { return m_key.module(); } /** * @brief instanceId returns the instance id of this module. * @return a string with this module's instance id. */ QString instanceId() const { return m_key.id(); } /** * @brief instanceKey returns the instance key of this module. * @return a string with the instance key. * A module instance's instance key is modulename\@instanceid. * For instance, "partition\@partition" (default configuration) or * "locale\@someconfig" (custom configuration) */ ModuleSystem::InstanceKey instanceKey() const { return m_key; } /** * @brief location returns the full path of this module's directory. * @return the path. */ QString location() const { return m_directory; } /** * @brief Is this an emergency module? * * An emergency module is run even if an error occurs * which would terminate Calamares earlier in the same * *exec* block. Emergency modules in later exec blocks * are not run (in the common case where there is only * one exec block, this doesn't really matter). */ bool isEmergency() const { return m_emergency; } /** * @brief isLoaded reports on the loaded status of a module. * @return true if the module's loading phase has finished, otherwise false. */ bool isLoaded() const { return m_loaded; } /** * @brief configurationMap returns the contents of the configuration file for * this module instance. * @return the instance's configuration, already parsed from YAML into a variant map. */ QVariantMap configurationMap(); /** * @brief typeString returns a user-visible string for the module's type. * @return the type string. */ QString typeString() const; /** * @brief interface returns a user-visible string for the module's interface. * @return the interface string. */ QString interfaceString() const; /** * @brief loadSelf initialized the module. * Subclasses must reimplement this depending on the module type and interface. */ virtual void loadSelf() = 0; /** * @brief jobs returns any jobs exposed by this module. * @return a list of jobs (can be empty). */ virtual JobList jobs() const = 0; /** * @brief type returns the Type of this module object. * @return the type enum value. */ virtual Type type() const = 0; /** * @brief interface the Interface used by this module. * @return the interface enum value. */ virtual Interface interface() const = 0; /** * @brief Check the requirements of this module. */ virtual RequirementsList checkRequirements(); protected: explicit Module(); /// @brief For subclasses to read their part of the descriptor virtual void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) = 0; /// @brief Generic part of descriptor reading (and instance id) void initFrom( const ModuleSystem::Descriptor& moduleDescriptor, const QString& id ); QVariantMap m_configurationMap; bool m_loaded = false; bool m_emergency = false; // Based on module and local config bool m_maybe_emergency = false; // Based on the module.desc private: void loadConfigurationFile( const QString& configFileName ); //throws YAML::Exception QString m_directory; ModuleSystem::InstanceKey m_key; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_MODULE_H calamares-3.2.41.1/src/libcalamares/modulesystem/Preset.cpp000066400000000000000000000042401410275732300236020ustar00rootroot00000000000000/* === 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 "Preset.h" #include "utils/Logger.h" #include "utils/Variant.h" static void loadPresets( Calamares::ModuleSystem::Presets& preset, const QVariantMap& configurationMap, std::function< bool( const QString& ) > pred ) { cDebug() << "Creating presets" << preset.capacity(); for ( auto it = configurationMap.cbegin(); it != configurationMap.cend(); ++it ) { if ( !it.key().isEmpty() && pred( it.key() ) ) { QVariantMap m = it.value().toMap(); QString value = CalamaresUtils::getString( m, "value" ); bool editable = CalamaresUtils::getBool( m, "editable", true ); preset.append( Calamares::ModuleSystem::PresetField { it.key(), value, editable } ); cDebug() << Logger::SubEntry << "Preset for" << it.key() << "applied editable?" << editable; } } } namespace Calamares { namespace ModuleSystem { Presets::Presets( const QVariantMap& configurationMap ) { reserve( configurationMap.count() ); loadPresets( *this, configurationMap, []( const QString& ) { return true; } ); } Presets::Presets( const QVariantMap& configurationMap, const QStringList& recognizedKeys ) { reserve( recognizedKeys.size() ); loadPresets( *this, configurationMap, [&recognizedKeys]( const QString& s ) { return recognizedKeys.contains( s ); } ); } bool Presets::isEditable( const QString& fieldName ) const { for ( const auto& p : *this ) { if ( p.fieldName == fieldName ) { return p.editable; } } cWarning() << "Checking isEditable for unknown field" << fieldName; return true; } PresetField Presets::find( const QString& fieldName ) const { for ( const auto& p : *this ) { if ( p.fieldName == fieldName ) { return p; } } return PresetField(); } } // namespace ModuleSystem } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/Preset.h000066400000000000000000000052431410275732300232530ustar00rootroot00000000000000/* === 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 CALAMARES_MODULESYSTEM_PRESET_H #define CALAMARES_MODULESYSTEM_PRESET_H #include #include #include namespace Calamares { namespace ModuleSystem { /** @brief The settings for a single field * * The settings apply to a single field; **often** this will * correspond to a single value or property of a Config * object, but there is no guarantee of a correspondence * between names here and names in the code. * * The value is stored as a string; consumers (e.g. the UI) * will need to translate the value to whatever is actually * used (e.g. in the case of an integer field). * * By default, presets are still editable. Set that to @c false * to make the field unchangeable (again, the UI is responsible * for setting that up). */ struct PresetField { QString fieldName; QVariant value; bool editable = true; bool isValid() const { return !fieldName.isEmpty(); } }; /** @brief All the presets for one UI entity * * This is a collection of presets read from a module * configuration file, one setting per field. */ class Presets : public QVector< PresetField > { public: /** @brief Reads preset entries from the map * * The map's keys are used as field name, and each value entry * should specify an initial value and whether the entry is editable. * Fields are editable by default. */ explicit Presets( const QVariantMap& configurationMap ); /** @brief Reads preset entries from the @p configurationMap * * As above, but only field names that occur in @p recognizedKeys * are kept; others are discarded. */ Presets( const QVariantMap& configurationMap, const QStringList& recognizedKeys ); /** @brief Creates an empty presets map * * This constructor is primarily intended for use by the ApplyPresets * helper class, which will reserve suitable space and load * presets on-demand. */ Presets() = default; /** @brief Is the given @p fieldName editable? * * Fields are editable by default, so if there is no explicit setting, * returns @c true. */ bool isEditable( const QString& fieldName ) const; /** @brief Finds the settings for a field @p fieldName * * If there is no such field, returns an invalid PresetField. */ PresetField find( const QString& fieldName ) const; }; } // namespace ModuleSystem } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/Requirement.h000066400000000000000000000031651410275732300243120ustar00rootroot00000000000000/* === 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. * * */ #ifndef CALAMARES_REQUIREMENT_H #define CALAMARES_REQUIREMENT_H #include "DllMacro.h" #include #include #include #include namespace Calamares { /** * An indication of a requirement, which is checked in preparation * for system installation. An entry has a name and some explanation functions * (functions, because they need to respond to translations). * * A requirement can be *satisfied* or not. * A requirement can be optional (i.e. a "good to have") or mandatory. * * Requirements which are not satisfied, and also mandatory, will prevent the * installation from proceeding. */ struct RequirementEntry { using TextFunction = std::function< QString() >; /// @brief name of this requirement; not shown to user and used as ID QString name; /// @brief Detailed description of this requirement, for use in user-visible lists TextFunction enumerationText; /// @brief User-visible string to show that the requirement is not met, short form TextFunction negatedText; bool satisfied; bool mandatory; /// @brief Convenience to check if this entry should be shown in details dialog bool hasDetails() const { return !enumerationText().isEmpty(); } }; using RequirementsList = QList< RequirementEntry >; } // namespace Calamares Q_DECLARE_METATYPE( Calamares::RequirementEntry ) #endif calamares-3.2.41.1/src/libcalamares/modulesystem/RequirementsChecker.cpp000066400000000000000000000073001410275732300263100ustar00rootroot00000000000000/* === 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 "RequirementsChecker.h" #include "modulesystem/Module.h" #include "modulesystem/Requirement.h" #include "modulesystem/RequirementsModel.h" #include "utils/Logger.h" #include #include #include #include #include namespace Calamares { RequirementsChecker::RequirementsChecker( QVector< Module* > modules, RequirementsModel* model, QObject* parent ) : QObject( parent ) , m_modules( std::move( modules ) ) , m_model( model ) , m_progressTimer( nullptr ) , m_progressTimeouts( 0 ) { m_watchers.reserve( m_modules.count() ); connect( this, &RequirementsChecker::requirementsProgress, model, &RequirementsModel::setProgressMessage ); } RequirementsChecker::~RequirementsChecker() {} void RequirementsChecker::run() { m_progressTimer = new QTimer( this ); connect( m_progressTimer, &QTimer::timeout, this, &RequirementsChecker::reportProgress ); m_progressTimer->start( 1200 ); // msec for ( const auto& module : m_modules ) { Watcher* watcher = new Watcher( this ); watcher->setFuture( QtConcurrent::run( this, &RequirementsChecker::addCheckedRequirements, module ) ); watcher->setObjectName( module->name() ); m_watchers.append( watcher ); connect( watcher, &Watcher::finished, this, &RequirementsChecker::finished ); } QTimer::singleShot( 0, this, &RequirementsChecker::finished ); } void RequirementsChecker::finished() { static QMutex finishedMutex; QMutexLocker lock( &finishedMutex ); if ( m_progressTimer && std::all_of( m_watchers.cbegin(), m_watchers.cend(), []( const Watcher* w ) { return w && w->isFinished(); } ) ) { cDebug() << "All requirements have been checked."; if ( m_progressTimer ) { m_progressTimer->stop(); delete m_progressTimer; m_progressTimer = nullptr; } m_model->describe(); m_model->changeRequirementsList(); QTimer::singleShot( 0, this, &RequirementsChecker::done ); } } void RequirementsChecker::addCheckedRequirements( Module* m ) { RequirementsList l = m->checkRequirements(); if ( l.count() > 0 ) { cDebug() << "Got" << l.count() << "requirement results from" << m->name(); m_model->addRequirementsList( l ); } requirementsProgress( tr( "Requirements checking for module %1 is complete." ).arg( m->name() ) ); } void RequirementsChecker::reportProgress() { m_progressTimeouts++; QStringList remainingNames; auto remaining = std::count_if( m_watchers.cbegin(), m_watchers.cend(), [&]( const Watcher* w ) { if ( w && !w->isFinished() ) { remainingNames << w->objectName(); return true; } return false; } ); if ( remaining > 0 ) { cDebug() << "Remaining modules:" << remaining << Logger::DebugList( remainingNames ); unsigned int posInterval = ( m_progressTimer->interval() < 0 ) ? 1000 : uint( m_progressTimer->interval() ); QString waiting = tr( "Waiting for %n module(s).", "", remaining ); QString elapsed = tr( "(%n second(s))", "", m_progressTimeouts * posInterval / 1000 ); emit requirementsProgress( waiting + QString( " " ) + elapsed ); } else { emit requirementsProgress( tr( "System-requirements checking is complete." ) ); } } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/RequirementsChecker.h000066400000000000000000000033031410275732300257540ustar00rootroot00000000000000/* === 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 CALAMARES_REQUIREMENTSCHECKER_H #define CALAMARES_REQUIREMENTSCHECKER_H #include "modulesystem/Requirement.h" #include #include #include #include namespace Calamares { class Module; class RequirementsModel; /** @brief A manager-class that checks all the module requirements * * Asynchronously checks the requirements for each module, and * emits progress signals as appropriate. */ class RequirementsChecker : public QObject { Q_OBJECT public: RequirementsChecker( QVector< Module* > modules, RequirementsModel* model, QObject* parent = nullptr ); ~RequirementsChecker() override; public Q_SLOTS: /// @brief Start checking all the requirements void run(); /// @brief Called when requirements are reported by a module void addCheckedRequirements( Module* ); /// @brief Called when all requirements have been checked void finished(); /// @brief Called periodically while requirements are being checked void reportProgress(); signals: /// @brief Human-readable progress message void requirementsProgress( const QString& ); /// @brief Emitted after requirementsComplete void done(); private: QVector< Module* > m_modules; using Watcher = QFutureWatcher< void >; QVector< Watcher* > m_watchers; RequirementsModel* m_model; QTimer* m_progressTimer; unsigned m_progressTimeouts; }; } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/RequirementsModel.cpp000066400000000000000000000055011410275732300260050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "RequirementsModel.h" #include "utils/Logger.h" namespace Calamares { void RequirementsModel::addRequirementsList( const Calamares::RequirementsList& requirements ) { QMutexLocker l( &m_addLock ); emit beginResetModel(); m_requirements.append( requirements ); changeRequirementsList(); emit endResetModel(); } void RequirementsModel::changeRequirementsList() { auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; m_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied ); m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); emit satisfiedRequirementsChanged( m_satisfiedRequirements ); emit satisfiedMandatoryChanged( m_satisfiedMandatory ); } int RequirementsModel::rowCount( const QModelIndex& ) const { return m_requirements.count(); } QVariant RequirementsModel::data( const QModelIndex& index, int role ) const { const auto requirement = m_requirements.at( index.row() ); switch ( role ) { case Roles::Name: return requirement.name; case Roles::Details: return requirement.enumerationText(); case Roles::NegatedText: return requirement.negatedText(); case Roles::Satisfied: return requirement.satisfied; case Roles::Mandatory: return requirement.mandatory; case Roles::HasDetails: return requirement.hasDetails(); default: return QVariant(); } } QHash< int, QByteArray > RequirementsModel::roleNames() const { static QHash< int, QByteArray > roles; roles[ Roles::Name ] = "name"; roles[ Roles::Details ] = "details"; roles[ Roles::NegatedText ] = "negatedText"; roles[ Roles::Satisfied ] = "satisfied"; roles[ Roles::Mandatory ] = "mandatory"; roles[ Roles::HasDetails ] = "hasDetails"; return roles; } void RequirementsModel::describe() const { cDebug() << "Requirements model has" << m_requirements.count() << "items"; int count = 0; for ( const auto& r : m_requirements ) { cDebug() << Logger::SubEntry << "requirement" << count << r.name << "satisfied?" << r.satisfied << "mandatory?" << r.mandatory; ++count; } } void RequirementsModel::setProgressMessage( const QString& m ) { m_progressMessage = m; emit progressMessageChanged( m_progressMessage ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamares/modulesystem/RequirementsModel.h000066400000000000000000000057021410275732300254550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef CALAMARES_REQUIREMENTSMODEL_H #define CALAMARES_REQUIREMENTSMODEL_H #include "Requirement.h" #include "DllMacro.h" #include #include namespace Calamares { class RequirementsChecker; /** @brief System requirements from each module and their checked-status * * A Calamares module can have system requirements (e.g. check for * internet, or amount of RAM, or an available disk) which can * be stated and checked. * * This model collects those requirements, can run the checks, and * reports on the overall status of those checks. */ class DLLEXPORT RequirementsModel : public QAbstractListModel { friend class RequirementsChecker; Q_OBJECT Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL ) Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL ) Q_PROPERTY( QString progressMessage READ progressMessage NOTIFY progressMessageChanged FINAL ) public: using QAbstractListModel::QAbstractListModel; enum Roles : short { Name, Satisfied, Mandatory, Details, NegatedText, HasDetails }; // No Q_ENUM because these are exposed through roleNames() ///@brief Are all the requirements satisfied? bool satisfiedRequirements() const { return m_satisfiedRequirements; } ///@brief Are all the **mandatory** requirements satisfied? bool satisfiedMandatory() const { return m_satisfiedMandatory; } ///@brief Message (from an ongoing check) about progress QString progressMessage() const { return m_progressMessage; } QVariant data( const QModelIndex& index, int role ) const override; int rowCount( const QModelIndex& ) const override; int count() const { return m_requirements.count(); } ///@brief Debugging tool, describe the checking-state void describe() const; signals: void satisfiedRequirementsChanged( bool value ); void satisfiedMandatoryChanged( bool value ); void progressMessageChanged( QString message ); protected: QHash< int, QByteArray > roleNames() const override; ///@brief Append some requirements; resets the model void addRequirementsList( const Calamares::RequirementsList& requirements ); ///@brief Update progress message (called by the checker) void setProgressMessage( const QString& m ); private: ///@brief Implementation for {set,add}RequirementsList void changeRequirementsList(); QString m_progressMessage; QMutex m_addLock; RequirementsList m_requirements; bool m_satisfiedRequirements = false; bool m_satisfiedMandatory = false; }; } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamares/modulesystem/Tests.cpp000066400000000000000000000110231410275732300234370ustar00rootroot00000000000000/* === 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 "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include using Calamares::ModuleSystem::InstanceKey; class ModuleSystemTests : public QObject { Q_OBJECT public: ModuleSystemTests() {} ~ModuleSystemTests() override {} private Q_SLOTS: void initTestCase(); void testEmptyInstanceKey(); void testCustomInstanceKey(); void testFromStringInstanceKey(); void testBadSimpleCases(); void testBadFromStringCases(); void testBasicDescriptor(); }; void ModuleSystemTests::initTestCase() { } void assert_is_invalid( const InstanceKey& k ) { QVERIFY( !k.isValid() ); QVERIFY( !k.isCustom() ); QVERIFY( k.module().isEmpty() ); QVERIFY( k.id().isEmpty() ); if ( k.toString().isEmpty() ) { QVERIFY( k.toString().isEmpty() ); } else { QCOMPARE( k.toString(), QString() ); } } void ModuleSystemTests::testEmptyInstanceKey() { InstanceKey k0; assert_is_invalid( k0 ); } void ModuleSystemTests::testCustomInstanceKey() { InstanceKey k0( "derp", "derp" ); QVERIFY( k0.isValid() ); QVERIFY( !k0.isCustom() ); QCOMPARE( k0.module(), QStringLiteral( "derp" ) ); QCOMPARE( k0.id(), QStringLiteral( "derp" ) ); QCOMPARE( k0.toString(), QStringLiteral( "derp@derp" ) ); InstanceKey k1( "derp", "horse" ); QVERIFY( k1.isValid() ); QVERIFY( k1.isCustom() ); QCOMPARE( k1.module(), QStringLiteral( "derp" ) ); QCOMPARE( k1.id(), QStringLiteral( "horse" ) ); QCOMPARE( k1.toString(), QStringLiteral( "derp@horse" ) ); InstanceKey k4( "derp", QString() ); QVERIFY( k4.isValid() ); QVERIFY( !k4.isCustom() ); QCOMPARE( k4.module(), QStringLiteral( "derp" ) ); QCOMPARE( k4.id(), QStringLiteral( "derp" ) ); QCOMPARE( k4.toString(), QStringLiteral( "derp@derp" ) ); } void ModuleSystemTests::testFromStringInstanceKey() { InstanceKey k0 = InstanceKey::fromString( "derp@derp" ); QVERIFY( k0.isValid() ); QVERIFY( !k0.isCustom() ); QCOMPARE( k0.module(), QStringLiteral( "derp" ) ); QCOMPARE( k0.id(), QStringLiteral( "derp" ) ); InstanceKey k1 = InstanceKey::fromString( "derp@horse" ); QVERIFY( k1.isValid() ); QVERIFY( k1.isCustom() ); QCOMPARE( k1.module(), QStringLiteral( "derp" ) ); QCOMPARE( k1.id(), QStringLiteral( "horse" ) ); InstanceKey k2 = InstanceKey::fromString( "derp" ); QVERIFY( k2.isValid() ); QVERIFY( !k2.isCustom() ); QCOMPARE( k2.module(), QStringLiteral( "derp" ) ); QCOMPARE( k2.id(), QStringLiteral( "derp" ) ); } /// @brief These are expected to fail since they show bugs in the code void ModuleSystemTests::testBadSimpleCases() { InstanceKey k4( "derp", "derp@derp" ); assert_is_invalid( k4 ); } void ModuleSystemTests::testBadFromStringCases() { InstanceKey k0 = InstanceKey::fromString( QString() ); assert_is_invalid( k0 ); k0 = InstanceKey::fromString( "derp@derp@derp" ); assert_is_invalid( k0 ); } void ModuleSystemTests::testBasicDescriptor() { { QVariantMap m; auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); QVERIFY( !d.isValid() ); QVERIFY( d.name().isEmpty() ); } { QVariantMap m; m.insert( "name", QVariant() ); auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); QVERIFY( !d.isValid() ); QVERIFY( d.name().isEmpty() ); } { QVariantMap m; m.insert( "name", 17 ); auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); QVERIFY( !d.isValid() ); QVERIFY( !d.name().isEmpty() ); QCOMPARE( d.name(), QStringLiteral( "17" ) ); // Strange but true } { QVariantMap m; m.insert( "name", "welcome" ); m.insert( "type", "viewmodule" ); m.insert( "interface", "qtplugin" ); auto d = Calamares::ModuleSystem::Descriptor::fromDescriptorData( m ); // QVERIFY( !d.isValid() ); QCOMPARE( d.name(), QStringLiteral( "welcome" ) ); QCOMPARE( d.type(), Calamares::ModuleSystem::Type::View ); QCOMPARE( d.interface(), Calamares::ModuleSystem::Interface::QtPlugin ); } } QTEST_GUILESS_MAIN( ModuleSystemTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/libcalamares/network/000077500000000000000000000000001410275732300205735ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/network/Manager.cpp000066400000000000000000000173561410275732300226650ustar00rootroot00000000000000/* === 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 "Manager.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include namespace CalamaresUtils { namespace Network { void RequestOptions::applyToRequest( QNetworkRequest* request ) const { #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) constexpr const auto RedirectPolicyAttribute = QNetworkRequest::FollowRedirectsAttribute; #else constexpr const auto RedirectPolicyAttribute = QNetworkRequest::RedirectPolicyAttribute; #endif if ( m_flags & Flag::FollowRedirect ) { // Follows all redirects except unsafe ones (https to http). request->setAttribute( RedirectPolicyAttribute, true ); } if ( m_flags & Flag::FakeUserAgent ) { // Not everybody likes the default User Agent used by this class (looking at you, // sourceforge.net), so let's set a more descriptive one. request->setRawHeader( "User-Agent", "Mozilla/5.0 (compatible; Calamares)" ); } } class Manager::Private : public QObject { Q_OBJECT private: std::unique_ptr< QNetworkAccessManager > m_nam; using ThreadNam = QPair< QThread*, QNetworkAccessManager* >; QVector< ThreadNam > m_perThreadNams; public slots: void cleanupNam(); public: QUrl m_hasInternetUrl; bool m_hasInternet; Private(); QNetworkAccessManager* nam(); }; Manager::Private::Private() : m_nam( std::make_unique< QNetworkAccessManager >() ) , m_hasInternet( false ) { m_perThreadNams.reserve( 20 ); m_perThreadNams.append( qMakePair( QThread::currentThread(), m_nam.get() ) ); } static QMutex* namMutex() { static QMutex namMutex; return &namMutex; } QNetworkAccessManager* Manager::Private::nam() { QMutexLocker lock( namMutex() ); auto* thread = QThread::currentThread(); int index = 0; for ( const auto& n : m_perThreadNams ) { if ( n.first == thread ) { return n.second; } ++index; } // Need a new NAM for this thread QNetworkAccessManager* nam = new QNetworkAccessManager(); m_perThreadNams.append( qMakePair( thread, nam ) ); QObject::connect( thread, &QThread::finished, this, &Manager::Private::cleanupNam ); return nam; } void Manager::Private::cleanupNam() { QMutexLocker lock( namMutex() ); auto* thread = QThread::currentThread(); bool cleanupFound = false; int cleanupIndex = 0; for ( const auto& n : m_perThreadNams ) { if ( n.first == thread ) { cleanupFound = true; delete n.second; break; } ++cleanupIndex; } if ( cleanupFound ) { m_perThreadNams.remove( cleanupIndex ); } } Manager::Manager() : d( std::make_unique< Private >() ) { } Manager::~Manager() {} Manager& Manager::instance() { static auto* s_manager = new Manager(); return *s_manager; } bool Manager::hasInternet() { return d->m_hasInternet; } bool Manager::checkHasInternet() { d->m_hasInternet = synchronousPing( d->m_hasInternetUrl ); // For earlier Qt versions (< 5.15.0), set the accessibility flag to // NotAccessible if synchronous ping has failed, so that any module // using Qt's networkAccessible method to determine whether or not // internet connection is actually avaialable won't get confused over // virtualization technologies. #if ( QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ) ) if ( !d->m_hasInternet ) { d->nam()->setNetworkAccessible( QNetworkAccessManager::NotAccessible ); } #endif emit hasInternetChanged( d->m_hasInternet ); return d->m_hasInternet; } void Manager::setCheckHasInternetUrl( const QUrl& url ) { d->m_hasInternetUrl = url; } /** @brief Does a request asynchronously, returns the (pending) reply * * The extra options for the request are taken from @p options, * including the timeout setting. A timeout will cause the reply * to abort. The reply is **not** scheduled for deletion. * * On failure, returns nullptr (e.g. bad URL, timeout). */ static QNetworkReply* asynchronousRun( QNetworkAccessManager* nam, const QUrl& url, const RequestOptions& options ) { QNetworkRequest request = QNetworkRequest( url ); options.applyToRequest( &request ); QNetworkReply* reply = nam->get( request ); QTimer* timer = nullptr; // Bail out early if the request is bad if ( reply->error() ) { reply->deleteLater(); return nullptr; } if ( options.hasTimeout() ) { timer = new QTimer( reply ); timer->setSingleShot( true ); QObject::connect( timer, &QTimer::timeout, reply, &QNetworkReply::abort ); timer->start( options.timeout() ); } return reply; } /** @brief Does a request synchronously, returns the request itself * * The extra options for the request are taken from @p options, * including the timeout setting. * * On failure, returns nullptr (e.g. bad URL, timeout). The request * is marked for later automatic deletion, so don't store the pointer. */ static QPair< RequestStatus, QNetworkReply* > synchronousRun( QNetworkAccessManager* nam, const QUrl& url, const RequestOptions& options ) { auto* reply = asynchronousRun( nam, url, options ); if ( !reply ) { cDebug() << "Could not create request for" << url; return qMakePair( RequestStatus( RequestStatus::Failed ), nullptr ); } QEventLoop loop; QObject::connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit ); loop.exec(); reply->deleteLater(); if ( reply->isRunning() ) { cDebug() << "Timeout on request for" << url; return qMakePair( RequestStatus( RequestStatus::Timeout ), nullptr ); } else if ( reply->error() != QNetworkReply::NoError ) { cDebug() << "HTTP error" << reply->error() << "on request for" << url; return qMakePair( RequestStatus( RequestStatus::HttpError ), nullptr ); } else { return qMakePair( RequestStatus( RequestStatus::Ok ), reply ); } } RequestStatus Manager::synchronousPing( const QUrl& url, const RequestOptions& options ) { if ( !url.isValid() ) { return RequestStatus::Failed; } auto reply = synchronousRun( d->nam(), url, options ); if ( reply.first ) { return reply.second->bytesAvailable() ? RequestStatus::Ok : RequestStatus::Empty; } else { return reply.first; } } QByteArray Manager::synchronousGet( const QUrl& url, const RequestOptions& options ) { if ( !url.isValid() ) { return QByteArray(); } auto reply = synchronousRun( d->nam(), url, options ); return reply.first ? reply.second->readAll() : QByteArray(); } QNetworkReply* Manager::asynchronousGet( const QUrl& url, const CalamaresUtils::Network::RequestOptions& options ) { return asynchronousRun( d->nam(), url, options ); } QDebug& operator<<( QDebug& s, const CalamaresUtils::Network::RequestStatus& e ) { s << int( e.status ) << bool( e ); switch ( e.status ) { case RequestStatus::Ok: break; case RequestStatus::Timeout: s << "Timeout"; break; case RequestStatus::Failed: s << "Failed"; break; case RequestStatus::HttpError: s << "HTTP"; break; case RequestStatus::Empty: s << "Empty"; break; } return s; } } // namespace Network } // namespace CalamaresUtils #include "utils/moc-warnings.h" #include "Manager.moc" calamares-3.2.41.1/src/libcalamares/network/Manager.h000066400000000000000000000104101410275732300223120ustar00rootroot00000000000000/* === 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 LIBCALAMARES_NETWORK_MANAGER_H #define LIBCALAMARES_NETWORK_MANAGER_H #include "DllMacro.h" #include #include #include #include #include #include class QNetworkReply; class QNetworkRequest; namespace CalamaresUtils { namespace Network { class DLLEXPORT RequestOptions { public: using milliseconds = std::chrono::milliseconds; enum Flag { FollowRedirect = 0x1, FakeUserAgent = 0x100 }; Q_DECLARE_FLAGS( Flags, Flag ) RequestOptions() : m_flags( Flags() ) , m_timeout( -1 ) { } RequestOptions( Flags f, milliseconds timeout = milliseconds( -1 ) ) : m_flags( f ) , m_timeout( timeout ) { } void applyToRequest( QNetworkRequest* ) const; bool hasTimeout() const { return m_timeout > milliseconds( 0 ); } auto timeout() const { return m_timeout; } private: Flags m_flags; milliseconds m_timeout; }; Q_DECLARE_OPERATORS_FOR_FLAGS( RequestOptions::Flags ); struct RequestStatus { enum State { Ok, Timeout, // Timeout exceeded Failed, // bad Url HttpError, // some other HTTP error (eg. SSL failed) Empty // for ping(), response is empty }; RequestStatus( State s = Ok ) : status( s ) { } operator bool() const { return status == Ok; } State status; }; QDebug& operator<<( QDebug& s, const RequestStatus& e ); class DLLEXPORT Manager : public QObject { Q_OBJECT Q_PROPERTY( bool hasInternet READ hasInternet NOTIFY hasInternetChanged FINAL ) Manager(); public: /** @brief Gets the single Manager instance. * * Typical code will use `auto& nam = Manager::instance();` * to keep the reference. */ static Manager& instance(); ~Manager() override; /** @brief Checks if the given @p url returns data. * * Returns a RequestStatus, which converts to @c true if the ping * was successful. Other status reasons convert to @c false, * typically because of no data, a Url error or no network access. * * May return Empty if the request was successful but returned * no data at all. */ RequestStatus synchronousPing( const QUrl& url, const RequestOptions& options = RequestOptions() ); /** @brief Downloads the data from a given @p url * * Returns the data as a QByteArray, or an empty * array if any error occurred (or no data was returned). */ QByteArray synchronousGet( const QUrl& url, const RequestOptions& options = RequestOptions() ); /// @brief Set the URL which is used for the general "is there internet" check. void setCheckHasInternetUrl( const QUrl& url ); /** @brief Do a network request asynchronously. * * Returns a pointer to the reply-from-the-request. * This may be a nullptr if an error occurs immediately. * The caller is responsible for cleaning up the reply (eventually). */ QNetworkReply* asynchronousGet( const QUrl& url, const RequestOptions& options = RequestOptions() ); public Q_SLOTS: /** @brief Do an explicit check for internet connectivity. * * This **may** do a ping to the configured check URL, but can also * use other mechanisms. */ bool checkHasInternet(); /** @brief Is there internet connectivity? * * This returns the result of the last explicit check, or if there * is other information about the state of the internet connection, * whatever is known. @c true means you can expect (all) internet * connectivity to be present. */ bool hasInternet(); signals: /** @brief Indicates that internet connectivity status has changed * * The value is that returned from hasInternet() -- @c true when there * is connectivity, @c false otherwise. */ void hasInternetChanged( bool ); private: class Private; std::unique_ptr< Private > d; }; } // namespace Network } // namespace CalamaresUtils #endif // LIBCALAMARES_NETWORK_MANAGER_H calamares-3.2.41.1/src/libcalamares/network/Tests.cpp000066400000000000000000000033411410275732300224020ustar00rootroot00000000000000/* === 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 "Tests.h" #include "Manager.h" #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( NetworkTests ) NetworkTests::NetworkTests() {} NetworkTests::~NetworkTests() {} void NetworkTests::initTestCase() { } void NetworkTests::testInstance() { auto& nam = CalamaresUtils::Network::Manager::instance(); QVERIFY( !nam.hasInternet() ); } void NetworkTests::testPing() { using namespace CalamaresUtils::Network; Logger::setupLogLevel( Logger::LOGVERBOSE ); auto& nam = Manager::instance(); // On FreeBSD, the SSL handling depends on the presence of root keys // (from the ca_nss port) which may not be available. So HTTPS requests // may fail with SSLVerificationError; this breaks the tests even if // the point is to just check whether ping() works. // // So fall back to pinging example.com if the normal ping fails. auto canPing_www_kde_org = nam.synchronousPing( QUrl( "https://www.kde.org" ), RequestOptions( RequestOptions::FollowRedirect ) ); cDebug() << "Ping:" << canPing_www_kde_org; if ( canPing_www_kde_org.status == RequestStatus::HttpError ) { cDebug() << Logger::SubEntry << "Some HTTP failure, try example.com instead."; auto canPing_example_com = nam.synchronousPing( QUrl( "http://example.com" ), RequestOptions( RequestOptions::FollowRedirect ) ); QVERIFY( canPing_example_com ); } else { QVERIFY( canPing_www_kde_org ); } } calamares-3.2.41.1/src/libcalamares/network/Tests.h000066400000000000000000000010671410275732300220520ustar00rootroot00000000000000/* === 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 LIBCALAMARES_NETWORK_TESTS_H #define LIBCALAMARES_NETWORK_TESTS_H #include class NetworkTests : public QObject { Q_OBJECT public: NetworkTests(); ~NetworkTests() override; private Q_SLOTS: void initTestCase(); void testInstance(); void testPing(); }; #endif calamares-3.2.41.1/src/libcalamares/packages/000077500000000000000000000000001410275732300206605ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/packages/Globals.cpp000066400000000000000000000062521410275732300227540ustar00rootroot00000000000000/* === 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 "Globals.h" #include "GlobalStorage.h" #include "utils/Logger.h" static bool additions( Calamares::GlobalStorage* gs, const QString& key, const QVariantList& installPackages, const QVariantList& tryInstallPackages ) { 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) QVariantList packageOperations = gs->contains( PACKAGEOP ) ? gs->value( PACKAGEOP ).toList() : QVariantList(); cDebug() << "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. bool somethingRemoved = false; for ( int index = packageOperations.length() - 1; 0 <= index; index-- ) { const QVariantMap op = packageOperations.at( index ).toMap(); if ( op.contains( "source" ) && op.value( "source" ).toString() == key ) { cDebug() << Logger::SubEntry << "Removing existing operations for" << key; packageOperations.removeAt( index ); somethingRemoved = true; } } if ( !installPackages.empty() ) { QVariantMap op; op.insert( "install", QVariant( installPackages ) ); op.insert( "source", key ); packageOperations.append( op ); cDebug() << Logger::SubEntry << installPackages.length() << "critical packages."; } if ( !tryInstallPackages.empty() ) { QVariantMap op; op.insert( "try_install", QVariant( tryInstallPackages ) ); op.insert( "source", key ); packageOperations.append( op ); cDebug() << Logger::SubEntry << tryInstallPackages.length() << "non-critical packages."; } if ( somethingRemoved || !packageOperations.isEmpty() ) { gs->insert( PACKAGEOP, packageOperations ); return true; } return false; } bool CalamaresUtils::Packages::setGSPackageAdditions( Calamares::GlobalStorage* gs, const Calamares::ModuleSystem::InstanceKey& module, const QVariantList& installPackages, const QVariantList& tryInstallPackages ) { return additions( gs, module.toString(), installPackages, tryInstallPackages ); } bool CalamaresUtils::Packages::setGSPackageAdditions( Calamares::GlobalStorage* gs, const Calamares::ModuleSystem::InstanceKey& module, const QStringList& installPackages ) { QVariantList l; for ( const auto& s : installPackages ) { l << s; } return additions( gs, module.toString(), l, QVariantList() ); } calamares-3.2.41.1/src/libcalamares/packages/Globals.h000066400000000000000000000030361410275732300224160ustar00rootroot00000000000000/* === 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 LIBCALAMARES_PACKAGES_GLOBALS_H #define LIBCALAMARES_PACKAGES_GLOBALS_H #include "GlobalStorage.h" #include "modulesystem/InstanceKey.h" namespace CalamaresUtils { namespace Packages { /** @brief Sets the install-packages GS keys for the given module * * This replaces previously-set install-packages lists for the * given module by the two new lists. * * Returns @c true if anything was changed, @c false otherwise. */ bool setGSPackageAdditions( Calamares::GlobalStorage* gs, const Calamares::ModuleSystem::InstanceKey& module, const QVariantList& installPackages, const QVariantList& tryInstallPackages ); /** @brief Sets the install-packages GS keys for the given module * * This replaces previously-set install-packages lists. Use this with * plain lists of package names. It does not support try-install. */ bool setGSPackageAdditions( Calamares::GlobalStorage* gs, const Calamares::ModuleSystem::InstanceKey& module, const QStringList& installPackages ); // void setGSPackageRemovals( const Calamares::ModuleSystem::InstanceKey& key, const QVariantList& removePackages ); } // namespace Packages } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/packages/Tests.cpp000066400000000000000000000203421410275732300224670ustar00rootroot00000000000000/* === 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 "Globals.h" #include "GlobalStorage.h" #include "utils/Logger.h" #include class PackagesTests : public QObject { Q_OBJECT public: PackagesTests() {} ~PackagesTests() override {} private Q_SLOTS: void initTestCase(); void testEmpty(); void testAdd_data(); /** @brief Test various add calls, for a "clean" GS * * Check that adding through the variant- and the stringlist-API * does the same thing. */ void testAdd(); /// Test replacement and mixing string-list with variant calls void testAddMixed(); }; void PackagesTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void PackagesTests::testEmpty() { Calamares::GlobalStorage gs; const QString topKey( "packageOperations" ); Calamares::ModuleSystem::InstanceKey k( "this", "that" ); QVERIFY( !gs.contains( topKey ) ); QCOMPARE( k.toString(), "this@that" ); // Adding nothing at all does nothing QVERIFY( !CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QVariantList(), QVariantList() ) ); QVERIFY( !gs.contains( topKey ) ); QVERIFY( !CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QStringList() ) ); QVERIFY( !gs.contains( topKey ) ); } void PackagesTests::testAdd_data() { QTest::addColumn< QStringList >( "packages" ); QTest::newRow( "one" ) << QStringList { QString( "vim" ) }; QTest::newRow( "two" ) << QStringList { QString( "vim" ), QString( "emacs" ) }; QTest::newRow( "one-again" ) << QStringList { QString( "nano" ) }; QTest::newRow( "six" ) << QStringList { QString( "vim" ), QString( "emacs" ), QString( "nano" ), QString( "kate" ), QString( "gedit" ), QString( "sublime" ) }; // There is no "de-duplication" so this will insert "cim" twice QTest::newRow( "dups" ) << QStringList { QString( "cim" ), QString( "vim" ), QString( "cim" ) }; } void PackagesTests::testAdd() { Calamares::GlobalStorage gs; const QString extraEditor( "notepad++" ); const QString topKey( "packageOperations" ); Calamares::ModuleSystem::InstanceKey k( "this", "that" ); Calamares::ModuleSystem::InstanceKey otherInstance( "this", "other" ); QFETCH( QStringList, packages ); QVERIFY( !packages.contains( extraEditor ) ); { QVERIFY( !gs.contains( topKey ) ); QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QVariant( packages ).toList(), QVariantList() ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 1 ); auto action = actionList[ 0 ].toMap(); QVERIFY( action.contains( "install" ) ); auto op = action[ "install" ].toList(); QCOMPARE( op.length(), packages.length() ); for ( const auto& s : qAsConst( packages ) ) { QVERIFY( op.contains( s ) ); } cDebug() << op; } { QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, otherInstance, packages ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 2 ); // One for each instance key! auto action = actionList[ 0 ].toMap(); auto secondaction = actionList[ 1 ].toMap(); auto op = action[ "install" ].toList(); auto secondop = secondaction[ "install" ].toList(); QCOMPARE( op, secondop ); } { // Replace one and expect differences packages << extraEditor; QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, otherInstance, packages ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 2 ); // One for each instance key! for ( const auto& actionVariant : qAsConst( actionList ) ) { auto action = actionVariant.toMap(); QVERIFY( action.contains( "install" ) ); QVERIFY( action.contains( "source" ) ); if ( action[ "source" ].toString() == otherInstance.toString() ) { auto op = action[ "install" ].toList(); QCOMPARE( op.length(), packages.length() ); // changed from original length, though for ( const auto& s : qAsConst( packages ) ) { QVERIFY( op.contains( s ) ); } } else { // This is the "original" instance, so it's missing extraEditor auto op = action[ "install" ].toList(); QCOMPARE( op.length(), packages.length()-1 ); // changed from original length QVERIFY( !op.contains( extraEditor ) ); } } } } void PackagesTests::testAddMixed() { Calamares::GlobalStorage gs; const QString extraEditor( "notepad++" ); const QString topKey( "packageOperations" ); Calamares::ModuleSystem::InstanceKey k( "this", "that" ); Calamares::ModuleSystem::InstanceKey otherInstance( "this", "other" ); // Just one { QVERIFY( !gs.contains( topKey ) ); QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QVariantList { QString( "vim" ) }, QVariantList() ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 1 ); auto action = actionList[ 0 ].toMap(); QVERIFY( action.contains( "install" ) ); auto op = action[ "install" ].toList(); QCOMPARE( op.length(), 1 ); QCOMPARE( op[ 0 ], QString( "vim" ) ); cDebug() << op; } // Replace with two packages { QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QVariantList { QString( "vim" ), QString( "emacs" ) }, QVariantList() ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 1 ); auto action = actionList[ 0 ].toMap(); QVERIFY( action.contains( "install" ) ); auto op = action[ "install" ].toList(); QCOMPARE( op.length(), 2 ); QCOMPARE( action[ "source" ].toString(), k.toString() ); QVERIFY( op.contains( QString( "vim" ) ) ); QVERIFY( op.contains( QString( "emacs" ) ) ); cDebug() << op; } // Replace with one (different) package { QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, k, QVariantList { QString( "nano" ) }, QVariantList() ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 1 ); auto action = actionList[ 0 ].toMap(); QVERIFY( action.contains( "install" ) ); auto op = action[ "install" ].toList(); QCOMPARE( op.length(), 1 ); QCOMPARE( action[ "source" ].toString(), k.toString() ); QCOMPARE( op[ 0 ], QString( "nano" ) ); cDebug() << op; } // Now we have two sources { QVERIFY( CalamaresUtils::Packages::setGSPackageAdditions( &gs, otherInstance, QStringList( extraEditor ) ) ); QVERIFY( gs.contains( topKey ) ); auto actionList = gs.value( topKey ).toList(); QCOMPARE( actionList.length(), 2 ); for ( const auto& actionVariant : qAsConst( actionList ) ) { auto action = actionVariant.toMap(); QVERIFY( action.contains( "install" ) ); QVERIFY( action.contains( "source" ) ); if ( action[ "source" ].toString() == otherInstance.toString() ) { auto op = action[ "install" ].toList(); QCOMPARE( op.length(), 1 ); QVERIFY( op.contains( action[ "source" ] == otherInstance.toString() ? extraEditor : QString( "nano" ) ) ); } } } } QTEST_GUILESS_MAIN( PackagesTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/libcalamares/partition/000077500000000000000000000000001410275732300211135ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/partition/AutoMount.cpp000066400000000000000000000052141410275732300235540ustar00rootroot00000000000000/* === 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 "AutoMount.h" #include "utils/Logger.h" #include #include namespace CalamaresUtils { namespace Partition { struct AutoMountInfo { bool wasSolidModuleAutoLoaded = false; }; static inline QDBusMessage kdedCall( const QString& method ) { return QDBusMessage::createMethodCall( QStringLiteral( "org.kde.kded5" ), QStringLiteral( "/kded" ), QStringLiteral( "org.kde.kded5" ), method ); } // This code comes, roughly, from the KCM for removable devices. static void enableSolidAutoMount( QDBusConnection& dbus, bool enable ) { const auto moduleName = QVariant( QStringLiteral( "device_automounter" ) ); // Stop module from auto-loading { auto msg = kdedCall( QStringLiteral( "setModuleAutoloading" ) ); msg.setArguments( { moduleName, QVariant( enable ) } ); dbus.call( msg, QDBus::NoBlock ); } // Stop module { auto msg = kdedCall( enable ? QStringLiteral( "loadModule" ) : QStringLiteral( "unloadModule" ) ); msg.setArguments( { moduleName } ); dbus.call( msg, QDBus::NoBlock ); } } static void querySolidAutoMount( QDBusConnection& dbus, AutoMountInfo& info ) { const auto moduleName = QVariant( QStringLiteral( "device_automounter" ) ); // Find previous setting; this **does** need to block auto msg = kdedCall( QStringLiteral( "isModuleAutoloaded" ) ); msg.setArguments( { moduleName } ); std::optional< bool > result; QDBusMessage r = dbus.call( msg, QDBus::Block ); if ( r.type() == QDBusMessage::ReplyMessage ) { auto arg = r.arguments(); if ( arg.length() == 1 ) { auto v = arg.at( 0 ); if ( v.isValid() && v.type() == QVariant::Bool ) { result = v.toBool(); } } } info.wasSolidModuleAutoLoaded = result.has_value() ? result.value() : false; } std::shared_ptr< AutoMountInfo > automountDisable( bool disable ) { auto u = std::make_shared< AutoMountInfo >(); QDBusConnection dbus = QDBusConnection::sessionBus(); querySolidAutoMount( dbus, *u ); enableSolidAutoMount( dbus, !disable ); return u; } void automountRestore( const std::shared_ptr< AutoMountInfo >& t ) { QDBusConnection dbus = QDBusConnection::sessionBus(); enableSolidAutoMount( dbus, t->wasSolidModuleAutoLoaded ); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/AutoMount.h000066400000000000000000000027121410275732300232210ustar00rootroot00000000000000/* === 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_AUTOMOUNT_H #define PARTITION_AUTOMOUNT_H #include "DllMacro.h" #include namespace CalamaresUtils { namespace Partition { struct AutoMountInfo; /** @brief Disable automount * * Various subsystems can do "agressive automount", which can get in the * way of partitioning actions. In particular, Solid can be configured * to automount every device it sees, and partitioning happens in multiple * steps (create table, create partition, set partition flags) which are * blocked if the partition gets mounted partway through the operation. * * @param disable set this to false to reverse the sense of the function * call and force *enabling* automount, instead. * * Returns an opaque structure which can be passed to automountRestore() * to return the system to the previously-configured automount settings. */ DLLEXPORT std::shared_ptr< AutoMountInfo > automountDisable( bool disable = true ); /** @brief Restore automount settings * * Pass the value returned from automountDisable() to restore the * previous settings. */ DLLEXPORT void automountRestore( const std::shared_ptr< AutoMountInfo >& t ); } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/partition/FileSystem.cpp000066400000000000000000000036401410275732300237060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * 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: see the License-Identifier above. * * */ #include "FileSystem.h" #include namespace CalamaresUtils { namespace Partition { QString prettyNameForFileSystemType( FileSystem::Type t ) { switch ( t ) { case FileSystem::Unknown: return QObject::tr( "unknown" ); case FileSystem::Extended: return QObject::tr( "extended" ); case FileSystem::Unformatted: return QObject::tr( "unformatted" ); case FileSystem::LinuxSwap: return QObject::tr( "swap" ); case FileSystem::Fat16: case FileSystem::Fat32: case FileSystem::Ntfs: case FileSystem::Xfs: case FileSystem::Jfs: case FileSystem::Hfs: case FileSystem::Ufs: case FileSystem::Hpfs: case FileSystem::Luks: case FileSystem::Ocfs2: case FileSystem::Zfs: case FileSystem::Nilfs2: return FileSystem::nameForType( t ).toUpper(); case FileSystem::ReiserFS: return "ReiserFS"; case FileSystem::Reiser4: return "Reiser4"; case FileSystem::HfsPlus: return "HFS+"; case FileSystem::Btrfs: return "Btrfs"; case FileSystem::Exfat: return "exFAT"; case FileSystem::Lvm2_PV: return "LVM PV"; default: return FileSystem::nameForType( t ); } } QString untranslatedFS( FileSystem::Type t ) { switch ( t ) { case FileSystem::Type::ReiserFS: return QStringLiteral( "reiserfs" ); default: return FileSystem::nameForType( t, { QStringLiteral( "C" ) } ); } } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/FileSystem.h000066400000000000000000000036051410275732300233540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_FILESYSTEM_H #define PARTITION_FILESYSTEM_H #include "DllMacro.h" #include namespace CalamaresUtils { namespace Partition { QString DLLEXPORT prettyNameForFileSystemType( FileSystem::Type t ); /** @brief Returns a machine-readable identifier for the filesystem type * * This identifier is used in filesystem manipulation -- * e.g. when mounting the filesystem, or in /etc/fstab. It * is almost always just what KPMCore says it is, with * the following exceptions: * - reiserfs is called "reiser" by KPMCore, "reiserfs" by Calamares */ QString DLLEXPORT untranslatedFS( FileSystem::Type t ); /** @brief Returns the machine-readable identifier for the given @p fs * * See notes for untranslatedFS(), above. */ static inline QString untranslatedFS( FileSystem& fs ) { return untranslatedFS( fs.type() ); } /** @brief Returns a machine-readable identifier for the given @p fs * * Returns an empty string is the @p fs is not valid (e.g. nullptr). */ static inline QString untranslatedFS( FileSystem* fs ) { return fs ? untranslatedFS( *fs ) : QString(); } static inline QString userVisibleFS( FileSystem& fs ) { return fs.name(); } static inline QString userVisibleFS( FileSystem* fs ) { return fs ? userVisibleFS( *fs ) : QString(); } } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONQUERY_H calamares-3.2.41.1/src/libcalamares/partition/Global.cpp000066400000000000000000000025511410275732300230220ustar00rootroot00000000000000/* === 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 "Global.h" #include "GlobalStorage.h" #include "JobQueue.h" #include static const QString fsUse_key = QStringLiteral( "filesystem_use" ); bool CalamaresUtils::Partition::isFilesystemUsedGS( const Calamares::GlobalStorage* gs, const QString& filesystemType ) { if ( !gs ) { return false; } const QVariantMap fsUse = gs->value( fsUse_key ).toMap(); QString key = filesystemType.toLower(); if ( fsUse.contains( key ) ) { const auto v = fsUse.value( key ); return v.toBool(); } return false; } void CalamaresUtils::Partition::useFilesystemGS( Calamares::GlobalStorage* gs, const QString& filesystemType, bool used ) { if ( gs ) { QVariantMap existingMap = gs->contains( fsUse_key ) ? gs->value( fsUse_key ).toMap() : QVariantMap(); QString key = filesystemType.toLower(); existingMap.insert( key, used ); gs->insert( fsUse_key, existingMap ); } } void CalamaresUtils::Partition::clearFilesystemGS( Calamares::GlobalStorage* gs ) { if ( gs ) { gs->remove( fsUse_key ); } } calamares-3.2.41.1/src/libcalamares/partition/Global.h000066400000000000000000000060061410275732300224660ustar00rootroot00000000000000/* === 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. * * */ /* * This is the API for manipulating Global Storage keys related to * filesystems and partitions. */ #ifndef PARTITION_GLOBAL_H #define PARTITION_GLOBAL_H #include "DllMacro.h" #include "JobQueue.h" #ifdef WITH_KPMCORE4API #include "FileSystem.h" #include #endif namespace CalamaresUtils { namespace Partition { /** @brief Mark a particular filesystem type as used (or not) * * Filesystems are marked used (or not) in the global storage * key *filesystem_use*. Sub-keys are the filesystem name, * and the values are boolean; filesystems that are used in * the target system are marked with @c true. Unused filesystems * may be unmarked, or may be marked @c false. * * The filesystem name should be the untranslated name. Filesystem * names are **lower**cased when used as keys. */ void DLLEXPORT useFilesystemGS( Calamares::GlobalStorage* gs, const QString& filesystemType, bool used ); /** @brief Reads from global storage whether the filesystem type is used * * Reads from the global storage key *filesystem_use* and returns * the boolean value stored in subkey @p filesystemType. Returns * @c false if the subkey is not set at all. * * The filesystem name should be the untranslated name. Filesystem * names are **lower**cased when used as keys. */ bool DLLEXPORT isFilesystemUsedGS( const Calamares::GlobalStorage* gs, const QString& filesystemType ); /** @brief Clears the usage data for filesystems * * This removes the internal key *filesystem_use*. */ void DLLEXPORT clearFilesystemGS( Calamares::GlobalStorage* gs ); /** @brief Convenience function for using "the" Global Storage * * @see useFilesystemGS(const QString&, bool) */ inline void useFilesystemGS( const QString& filesystemType, bool used ) { useFilesystemGS( Calamares::JobQueue::instanceGlobalStorage(), filesystemType, used ); } /** @brief Convenience function for using "the" Global Storage * * @see isFilesystemUsedGS(const QString&); */ inline bool isFilesystemUsedGS( const QString& filesystemType ) { return isFilesystemUsedGS( Calamares::JobQueue::instanceGlobalStorage(), filesystemType ); } #ifdef WITH_KPMCORE4API /** @brief Mark a particular filesystem type as used (or not) * * See useFilesystemGS(const QString&, bool); this method uses the filesystem type * enumeration to pick the name. */ inline void useFilesystemGS( FileSystem::Type filesystem, bool used ) { useFilesystemGS( untranslatedFS( filesystem ), used ); } /* @brief Reads from global storage whether the typesystem type is used * * See isFilesystemUsedGS(const QString&). */ inline bool isFilesystemUsedGS( FileSystem::Type filesystem ) { return isFilesystemUsedGS( untranslatedFS( filesystem ) ); } #endif } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/partition/KPMHelper.h000066400000000000000000000023451410275732300230570ustar00rootroot00000000000000/* === 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. * */ /* * KPMCore header file inclusion. * * Includes the system KPMCore headers without warnings (by switching off * the expected warnings). */ #ifndef PARTITION_KPMHELPER_H #define PARTITION_KPMHELPER_H // The kpmcore headers are not C++17 warning-proof, especially // with picky compilers like Clang 10. Since we use Clang for the // find-all-the-warnings case, switch those warnings off for // the we-can't-change-them system headers. #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdocumentation" #pragma clang diagnostic ignored "-Wsuggest-destructor-override" #pragma clang diagnostic ignored "-Winconsistent-missing-destructor-override" #endif #include #include #include #include #include #include #include #include #ifdef __clang__ #pragma clang diagnostic pop #endif #endif calamares-3.2.41.1/src/libcalamares/partition/KPMManager.cpp000066400000000000000000000057551410275732300235550ustar00rootroot00000000000000/* === 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 "KPMManager.h" #include "utils/Logger.h" #include #include #if defined( WITH_KPMCORE4API ) #include #endif #include namespace CalamaresUtils { namespace Partition { class InternalManager { public: InternalManager(); ~InternalManager(); }; static bool s_kpm_loaded = false; /* * We have one living InternalManager object at a time. * It is managed by shared_ptr<>s help by KPMManager * objects, but since we can create KPMManager objects * independent of each other, all of which share ownership * of the same InternalManager, hang on to one extra reference * to the InternalManager so we can hand it out in getInternal(). */ static std::weak_ptr< InternalManager > s_backend; InternalManager::InternalManager() { cDebug() << "KPMCore backend starting .."; Q_ASSERT( s_backend.expired() ); if ( !s_kpm_loaded ) { QByteArray backendName = qgetenv( "KPMCORE_BACKEND" ); if ( !CoreBackendManager::self()->load( backendName.isEmpty() ? CoreBackendManager::defaultBackendName() : backendName ) ) { cWarning() << "Failed to load backend plugin" << backendName; } else { auto* backend_p = CoreBackendManager::self()->backend(); cDebug() << Logger::SubEntry << "Backend" << Logger::Pointer( backend_p ) << backend_p->id() << backend_p->version(); s_kpm_loaded = true; } } } InternalManager::~InternalManager() { #if defined( WITH_KPMCORE4API ) && !defined( WITH_KPMCORE42API ) cDebug() << "Cleaning up KPMCore backend .."; // From KPMcore 4.0 until KPMcore 4.2 we needed to stop // the helper by hand. KPMcore 4.2 ported to polkit directly, // which doesn't need a helper. auto backend_p = CoreBackendManager::self()->backend(); if ( backend_p ) { ExternalCommand::stopHelper(); } #endif } std::shared_ptr< InternalManager > getInternal() { if ( s_backend.expired() ) { auto p = std::make_shared< InternalManager >(); s_backend = p; return p; } return s_backend.lock(); } KPMManager::KPMManager() : m_d( getInternal() ) { cDebug() << "KPMManager" << s_backend.use_count() << "created."; } KPMManager::~KPMManager() { cDebug() << "KPMManager" << s_backend.use_count() << "being destroyed."; } KPMManager::operator bool() const { return s_kpm_loaded; } CoreBackend* KPMManager::backend() const { return s_kpm_loaded ? CoreBackendManager::self()->backend() : nullptr; } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/KPMManager.h000066400000000000000000000027411410275732300232120ustar00rootroot00000000000000/* === 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. * * */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_KPMMANAGER_H #define PARTITION_KPMMANAGER_H #include class CoreBackend; namespace CalamaresUtils { namespace Partition { /// @brief Handle to KPMCore class InternalManager; /** @brief KPMCore loader and cleanup * * A Calamares plugin that uses KPMCore should hold an object of * this class; its only responsibility is to load KPMCore * and to cleanly unload it on destruction (with KPMCore 4, * also to shutdown the privileged helper application). * * It loads the default plugin ("parted" with KPMCore 3, "sfdisk" * with KPMCore 4), but this can be overridden by setting the * environment variable KPMCORE_BACKEND. Setting it to * "dummy" will load the dummy plugin instead. */ class KPMManager { public: KPMManager(); ~KPMManager(); /// @brief Is KPMCore loaded correctly? operator bool() const; /// @brief Gets the KPMCore backend (e.g. CoreBackendManager::self()->backend() ) CoreBackend* backend() const; private: std::shared_ptr< InternalManager > m_d; }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_KPMMANAGER_H calamares-3.2.41.1/src/libcalamares/partition/KPMTests.cpp000066400000000000000000000067161410275732300233030ustar00rootroot00000000000000/* === 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 "utils/Logger.h" #include "FileSystem.h" #include #include #include class KPMTests : public QObject { Q_OBJECT public: KPMTests(); ~KPMTests() override; private Q_SLOTS: void initTestCase(); void testFlagNames(); void testFSNames(); }; KPMTests::KPMTests() {} KPMTests::~KPMTests() {} void KPMTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void KPMTests::testFlagNames() { cDebug() << "Partition flags according to KPMCore:"; int f = 1; QStringList names; QString s; while ( !( s = PartitionTable::flagName( static_cast< PartitionTable::Flag >( f ) ) ).isEmpty() ) { cDebug() << Logger::SubEntry << f << s; names.append( s ); f <<= 1; } QCOMPARE( PartitionTable::flagName( static_cast< PartitionTable::Flag >( 1 ) ), QStringLiteral( "boot" ) ); #ifdef WITH_KPMCORE4API // KPMCore 4 unifies the flags and handles them internally QCOMPARE( PartitionTable::flagName( PartitionTable::Flag::Boot ), QStringLiteral( "boot" ) ); QVERIFY( names.contains( QStringLiteral( "boot" ) ) ); QVERIFY( !names.contains( QStringLiteral( "esp" ) ) ); #else // KPMCore 3 has separate flags QCOMPARE( PartitionTable::flagName( PartitionTable::FlagBoot ), QStringLiteral( "boot" ) ); QCOMPARE( PartitionTable::flagName( PartitionTable::FlagEsp ), QStringLiteral( "esp" ) ); QVERIFY( names.contains( QStringLiteral( "boot" ) ) ); QVERIFY( names.contains( QStringLiteral( "esp" ) ) ); #endif } void KPMTests::testFSNames() { cDebug() << "FileSystem names according to KPMCore:"; // This uses KPMCore directly, rather than Calamares partition/FileSystem.h // which doesn't wrap nameForType() -- it just provides more meaningful // names for FS naming on FileSystem objects. QStringList fsNames; const auto fstypes = FileSystem::types(); fsNames.reserve( fstypes.count() ); for ( const auto t : fstypes ) { QString s = FileSystem::nameForType( t, { "C" } ); // Untranslated cDebug() << Logger::SubEntry << s; fsNames.append( s ); } QVERIFY( fsNames.contains( "ext2" ) ); QVERIFY( fsNames.contains( "ext4" ) ); QVERIFY( fsNames.contains( "reiser" ) ); QStringList calaFSNames; calaFSNames.reserve( fstypes.count() ); for ( const auto t : fstypes ) { QString s = CalamaresUtils::Partition::untranslatedFS( t ); calaFSNames.append( s ); } QVERIFY( calaFSNames.contains( "ext2" ) ); QVERIFY( calaFSNames.contains( "ext4" ) ); QVERIFY( !calaFSNames.contains( "reiser" ) ); QVERIFY( calaFSNames.contains( "reiserfs" ) ); // whole point of Cala's own implementation // Lists are the same except for .. the exceptions QStringList exceptionalNames { "reiser", "reiserfs" }; for ( const auto& s : fsNames ) { QVERIFY( exceptionalNames.contains( s ) || calaFSNames.contains( s ) ); } for ( const auto& s : calaFSNames ) { QVERIFY( exceptionalNames.contains( s ) || fsNames.contains( s ) ); } } QTEST_GUILESS_MAIN( KPMTests ) #include "utils/moc-warnings.h" #include "KPMTests.moc" calamares-3.2.41.1/src/libcalamares/partition/Mount.cpp000066400000000000000000000061731410275732300227300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 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 "Mount.h" #include "partition/Sync.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include namespace CalamaresUtils { namespace Partition { int mount( const QString& devicePath, const QString& mountPoint, const QString& filesystemName, const QString& options ) { if ( devicePath.isEmpty() || mountPoint.isEmpty() ) { if ( devicePath.isEmpty() ) { cWarning() << "Can't mount an empty device."; } if ( mountPoint.isEmpty() ) { cWarning() << "Can't mount on an empty mountpoint."; } return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); } QDir mountPointDir( mountPoint ); if ( !mountPointDir.exists() ) { bool ok = mountPointDir.mkpath( mountPoint ); if ( !ok ) { cWarning() << "Could not create mountpoint" << mountPoint; return static_cast< int >( ProcessResult::Code::NoWorkingDirectory ); } } QStringList args = { "mount" }; if ( !filesystemName.isEmpty() ) { args << "-t" << filesystemName; } if ( !options.isEmpty() ) { if ( options.startsWith( '-' ) ) { args << options; } else { args << "-o" << options; } } args << devicePath << mountPoint; auto r = CalamaresUtils::System::runCommand( args, std::chrono::seconds( 10 ) ); sync(); return r.getExitCode(); } int unmount( const QString& path, const QStringList& options ) { auto r = CalamaresUtils::System::runCommand( QStringList { "umount" } << options << path, std::chrono::seconds( 10 ) ); sync(); return r.getExitCode(); } struct TemporaryMount::Private { QString m_devicePath; QTemporaryDir m_mountDir; }; TemporaryMount::TemporaryMount( const QString& devicePath, const QString& filesystemName, const QString& options ) : m_d( new Private ) { m_d->m_devicePath = devicePath; m_d->m_mountDir.setAutoRemove( false ); int r = mount( devicePath, m_d->m_mountDir.path(), filesystemName, options ); if ( r ) { cWarning() << "Mount of" << devicePath << "on" << m_d->m_mountDir.path() << "failed, code" << r; delete m_d; m_d = nullptr; } } TemporaryMount::~TemporaryMount() { if ( m_d ) { int r = unmount( m_d->m_mountDir.path(), { "-R" } ); if ( r ) { cWarning() << "UnMount of temporary" << m_d->m_devicePath << "on" << m_d->m_mountDir.path() << "failed, code" << r; } delete m_d; m_d = nullptr; } } QString TemporaryMount::path() const { return m_d ? m_d->m_mountDir.path() : QString(); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/Mount.h000066400000000000000000000042261410275732300223720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 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. * * */ #ifndef PARTITION_MOUNT_H #define PARTITION_MOUNT_H #include "DllMacro.h" #include #include namespace CalamaresUtils { namespace Partition { /** * Runs the mount utility with the specified parameters. * @param devicePath the path of the partition to mount. * @param mountPoint the full path of the target mount point. * @param filesystemName the name of the filesystem (optional). * @param options any additional options as passed to mount -o (optional). * If @p options starts with a dash (-) then it is passed unchanged * and no -o option is added; this is used in handling --bind mounts. * @returns the program's exit code, or: * Crashed = QProcess crash * FailedToStart = QProcess cannot start * NoWorkingDirectory = bad arguments */ DLLEXPORT int mount( const QString& devicePath, const QString& mountPoint, const QString& filesystemName = QString(), const QString& options = QString() ); /** @brief Unmount the given @p path (device or mount point). * * Runs umount(8) in the host system. * * @returns the program's exit code, or special codes like mount(). */ DLLEXPORT int unmount( const QString& path, const QStringList& options = QStringList() ); class DLLEXPORT TemporaryMount { public: TemporaryMount( const QString& devicePath, const QString& filesystemName = QString(), const QString& options = QString() ); TemporaryMount( const TemporaryMount& ) = delete; TemporaryMount& operator=( const TemporaryMount& ) = delete; ~TemporaryMount(); bool isValid() const { return m_d; } QString path() const; private: struct Private; Private* m_d = nullptr; }; } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/partition/PartitionIterator.cpp000066400000000000000000000061531410275732300253070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 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 "PartitionIterator.h" // KPMcore #include #include #include namespace CalamaresUtils { namespace Partition { using Partition = ::Partition; PartitionIterator::PartitionIterator( PartitionTable* table ) : m_table( table ) { } Partition* PartitionIterator::operator*() const { return m_current; } void PartitionIterator::operator++() { if ( !m_current ) { return; } if ( m_current->hasChildren() ) { // Go to the first child m_current = static_cast< Partition* >( m_current->children().first() ); return; } PartitionNode* parent = m_current->parent(); Partition* successor = parent->successor( *m_current ); if ( successor ) { // Go to the next sibling m_current = successor; return; } if ( parent->isRoot() ) { // We reached the end m_current = nullptr; return; } // Try to go to the next sibling of our parent PartitionNode* grandParent = parent->parent(); Q_ASSERT( grandParent ); // If parent is not root, then it's not a PartitionTable but a // Partition, we can static_cast it. m_current = grandParent->successor( *static_cast< Partition* >( parent ) ); } bool PartitionIterator::operator==( const PartitionIterator& other ) const { return m_table == other.m_table && m_current == other.m_current; } bool PartitionIterator::operator!=( const PartitionIterator& other ) const { return !( *this == other ); } PartitionIterator PartitionIterator::begin( Device* device ) { if ( !device ) { return PartitionIterator( nullptr ); } PartitionTable* table = device->partitionTable(); if ( !table ) { return PartitionIterator( nullptr ); } return PartitionIterator::begin( table ); } PartitionIterator PartitionIterator::begin( PartitionTable* table ) { auto it = PartitionIterator( table ); QList< Partition* > children = table->children(); // Does not usually happen, but it did happen on a tiny (10MiB) disk with an MBR // partition table. if ( children.isEmpty() ) { return it; } it.m_current = children.first(); return it; } PartitionIterator PartitionIterator::end( Device* device ) { if ( !device ) { return PartitionIterator( nullptr ); } PartitionTable* table = device->partitionTable(); if ( !table ) { return PartitionIterator( nullptr ); } return PartitionIterator::end( table ); } PartitionIterator PartitionIterator::end( PartitionTable* table ) { return PartitionIterator( table ); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/PartitionIterator.h000066400000000000000000000034111410275732300247460ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_PARTITIONITERATOR_H #define PARTITION_PARTITIONITERATOR_H class Device; class Partition; class PartitionTable; namespace CalamaresUtils { namespace Partition { /** @brief Iterator over KPMCore partitions * * A forward-only iterator to go through the partitions of a device, * independently of whether they are primary, logical or extended. * * An iterator can be created from a device (then it refers to the * partition table of that device) or a partition table. The * partition table must remain valid throughout iteration. * * A nullptr is valid, for an empty iterator. */ class PartitionIterator { public: ::Partition* operator*() const; void operator++(); bool operator==( const PartitionIterator& other ) const; bool operator!=( const PartitionIterator& other ) const; static PartitionIterator begin( ::Device* device ); static PartitionIterator begin( ::PartitionTable* table ); static PartitionIterator end( ::Device* device ); static PartitionIterator end( ::PartitionTable* table ); private: PartitionIterator( ::PartitionTable* table ); ::PartitionTable* m_table; ::Partition* m_current = nullptr; }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONITERATOR_H calamares-3.2.41.1/src/libcalamares/partition/PartitionQuery.cpp000066400000000000000000000052301410275732300246160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * 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: see the License-Identifier above. * * */ #include "PartitionQuery.h" #include "PartitionIterator.h" #include #include #include namespace CalamaresUtils { namespace Partition { // Types from KPMCore using ::Device; using ::Partition; const PartitionTable* getPartitionTable( const Partition* partition ) { const PartitionNode* root = partition; while ( root && !root->isRoot() ) { root = root->parent(); } return dynamic_cast< const PartitionTable* >( root ); } bool isPartitionFreeSpace( const Partition* partition ) { return partition->roles().has( PartitionRole::Unallocated ); } bool isPartitionNew( const Partition* partition ) { #if defined( WITH_KPMCORE4API ) constexpr auto NewState = Partition::State::New; #else constexpr auto NewState = Partition::StateNew; #endif return partition->state() == NewState; } Partition* findPartitionByCurrentMountPoint( const QList< Device* >& devices, const QString& mountPoint ) { for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( ( *it )->mountPoint() == mountPoint ) { return *it; } return nullptr; } Partition* findPartitionByPath( const QList< Device* >& devices, const QString& path ) { if ( path.simplified().isEmpty() ) { return nullptr; } for ( auto device : devices ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { if ( ( *it )->partitionPath() == path.simplified() ) { return *it; } } } return nullptr; } QList< Partition* > findPartitions( const QList< Device* >& devices, std::function< bool( Partition* ) > criterionFunction ) { QList< Partition* > results; for ( auto device : devices ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { if ( criterionFunction( *it ) ) { results.append( *it ); } } } return results; } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/PartitionQuery.h000066400000000000000000000043351410275732300242700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ /* * NOTE: this functionality is only available when Calamares is compiled * with KPMcore support. */ #ifndef PARTITION_PARTITIONQUERY_H #define PARTITION_PARTITIONQUERY_H #include #include class Device; class Partition; class PartitionTable; namespace CalamaresUtils { namespace Partition { using ::Device; using ::Partition; using ::PartitionTable; /** @brief Get partition table */ const PartitionTable* getPartitionTable( const Partition* partition ); /** @brief Is this a free-space area? */ bool isPartitionFreeSpace( const Partition* ); /** @brief Is this partition newly-to-be-created? * * Returns true if the partition is planned to be created by the installer as * opposed to already existing on the disk. */ bool isPartitionNew( const Partition* ); /** * Iterates on all devices and return the first partition which is (already) * mounted on @p mountPoint. */ Partition* findPartitionByCurrentMountPoint( const QList< Device* >& devices, const QString& mountPoint ); // TODO: add this distinction // Partition* findPartitionByIntendedMountPoint( const QList< Device* >& devices, const QString& mountPoint ); /** * Iterates on all devices and partitions and returns a pointer to the Partition object * for the given path, or nullptr if a Partition for the given path cannot be found. */ Partition* findPartitionByPath( const QList< Device* >& devices, const QString& path ); /** * Iterates on all devices and partitions and returns a list of pointers to the Partition * objects that satisfy the conditions defined in the criterion function. */ QList< Partition* > findPartitions( const QList< Device* >& devices, std::function< bool( Partition* ) > criterionFunction ); } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONQUERY_H calamares-3.2.41.1/src/libcalamares/partition/PartitionSize.cpp000066400000000000000000000150571410275732300244330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "partition/PartitionSize.h" #include "utils/Logger.h" #include "utils/Units.h" namespace CalamaresUtils { namespace Partition { static const NamedEnumTable< SizeUnit >& unitSuffixes() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< SizeUnit > names { { QStringLiteral( "%" ), SizeUnit::Percent }, { QStringLiteral( "K" ), SizeUnit::KiB }, { QStringLiteral( "KiB" ), SizeUnit::KiB }, { QStringLiteral( "M" ), SizeUnit::MiB }, { QStringLiteral( "MiB" ), SizeUnit::MiB }, { QStringLiteral( "G" ), SizeUnit::GiB }, { QStringLiteral( "GiB" ), SizeUnit::GiB }, { QStringLiteral( "KB" ), SizeUnit::KB }, { QStringLiteral( "MB" ), SizeUnit::MB }, { QStringLiteral( "GB" ), SizeUnit::GB } }; // clang-format on // *INDENT-ON* return names; } PartitionSize::PartitionSize( const QString& s ) : NamedSuffix( unitSuffixes(), s ) { if ( ( unit() == SizeUnit::Percent ) && ( value() > 100 || value() < 0 ) ) { cDebug() << "Percent value" << value() << "is not valid."; m_value = 0; } if ( m_unit == SizeUnit::None ) { m_value = s.toLongLong(); if ( m_value > 0 ) { m_unit = SizeUnit::Byte; } } if ( m_value <= 0 ) { m_value = 0; m_unit = SizeUnit::None; } } qint64 PartitionSize::toSectors( qint64 totalSectors, qint64 sectorSize ) const { if ( !isValid() ) { return -1; } if ( totalSectors < 1 || sectorSize < 1 ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( value() == 100 ) { return totalSectors; // Common-case, avoid futzing around } else { return totalSectors * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return CalamaresUtils::bytesToSectors( toBytes(), sectorSize ); } return -1; } qint64 PartitionSize::toBytes( qint64 totalSectors, qint64 sectorSize ) const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( totalSectors < 1 || sectorSize < 1 ) { return -1; } if ( value() == 100 ) { return totalSectors * sectorSize; // Common-case, avoid futzing around } else { return totalSectors * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return toBytes(); } __builtin_unreachable(); } qint64 PartitionSize::toBytes( qint64 totalBytes ) const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: return -1; case SizeUnit::Percent: if ( totalBytes < 1 ) { return -1; } if ( value() == 100 ) { return totalBytes; // Common-case, avoid futzing around } else { return totalBytes * value() / 100; } case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return toBytes(); } __builtin_unreachable(); } qint64 PartitionSize::toBytes() const { if ( !isValid() ) { return -1; } switch ( m_unit ) { case SizeUnit::None: case SizeUnit::Percent: return -1; case SizeUnit::Byte: return value(); case SizeUnit::KB: return CalamaresUtils::KBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::KiB: return CalamaresUtils::KiBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::MB: return CalamaresUtils::MBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::MiB: return CalamaresUtils::MiBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::GB: return CalamaresUtils::GBtoBytes( static_cast< unsigned long long >( value() ) ); case SizeUnit::GiB: return CalamaresUtils::GiBtoBytes( static_cast< unsigned long long >( value() ) ); } __builtin_unreachable(); } bool PartitionSize::operator<( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value < other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() < other.toBytes() ); } __builtin_unreachable(); } bool PartitionSize::operator>( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value > other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() > other.toBytes() ); } __builtin_unreachable(); } bool PartitionSize::operator==( const PartitionSize& other ) const { if ( !unitsComparable( m_unit, other.m_unit ) ) { return false; } switch ( m_unit ) { case SizeUnit::None: return false; case SizeUnit::Percent: return ( m_value == other.m_value ); case SizeUnit::Byte: case SizeUnit::KB: case SizeUnit::KiB: case SizeUnit::MB: case SizeUnit::MiB: case SizeUnit::GB: case SizeUnit::GiB: return ( toBytes() == other.toBytes() ); } __builtin_unreachable(); } } // namespace Partition } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/partition/PartitionSize.h000066400000000000000000000065441410275732300241010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef PARTITION_PARTITIONSIZE_H #define PARTITION_PARTITIONSIZE_H #include "utils/NamedSuffix.h" #include "utils/Units.h" // Qt #include namespace CalamaresUtils { namespace Partition { enum class SizeUnit { None, Percent, Byte, KB, KiB, MB, MiB, GB, GiB }; /** @brief Partition size expressions * * Sizes can be specified in bytes, KiB, MiB, GiB or percent (of * the available drive space are on). This class handles parsing * of such strings from the config file. */ class PartitionSize : public NamedSuffix< SizeUnit, SizeUnit::None > { public: PartitionSize() : NamedSuffix() { } PartitionSize( int v, SizeUnit u ) : NamedSuffix( v, u ) { } PartitionSize( const QString& ); bool isValid() const { return ( unit() != SizeUnit::None ) && ( value() > 0 ); } bool operator<( const PartitionSize& other ) const; bool operator>( const PartitionSize& other ) const; bool operator==( const PartitionSize& other ) const; /** @brief Convert the size to the number of sectors @p totalSectors . * * Each sector has size @p sectorSize, for converting sizes in Bytes, * KiB, MiB or GiB to sector counts. * * @return the number of sectors needed, or -1 for invalid sizes. */ qint64 toSectors( qint64 totalSectors, qint64 sectorSize ) const; /** @brief Convert the size to bytes. * * The device's sectors count @p totalSectors and sector size * @p sectoreSize are used to calculated the total size, which * is then used to calculate the size when using Percent. * * @return the size in bytes, or -1 for invalid sizes. */ qint64 toBytes( qint64 totalSectors, qint64 sectorSize ) const; /** @brief Convert the size to bytes. * * Total size @p totalBytes is needed for sizes in Percent. This * parameter is unused in any other case. * * @return the size in bytes, or -1 for invalid sizes. */ qint64 toBytes( qint64 totalBytes ) const; /** @brief Convert the size to bytes. * * This method is only valid for sizes in Bytes, KiB, MiB or GiB. * It will return -1 in any other case. Note that 0KiB and 0MiB and * 0GiB are considered **invalid** sizes and return -1. * * @return the size in bytes, or -1 if it cannot be calculated. */ qint64 toBytes() const; /** @brief Are the units comparable? * * None units cannot be compared with anything. Percentages can * be compared with each other, and all the explicit sizes (KiB, ...) * can be compared with each other. */ static constexpr bool unitsComparable( const SizeUnit u1, const SizeUnit u2 ) { return !( ( u1 == SizeUnit::None || u2 == SizeUnit::None ) || ( u1 == SizeUnit::Percent && u2 != SizeUnit::Percent ) || ( u1 != SizeUnit::Percent && u2 == SizeUnit::Percent ) ); } }; } // namespace Partition } // namespace CalamaresUtils #endif // PARTITION_PARTITIONSIZE_H calamares-3.2.41.1/src/libcalamares/partition/Sync.cpp000066400000000000000000000021601410275732300225320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "Sync.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" void CalamaresUtils::Partition::sync() { /* I would normally use full paths here, e.g. /sbin/udevadm and /bin/sync, * but there's enough variation / opinion on where these executables * should live, that full paths would need to be configurable. * Instead, just run them and assume they're found in PATH; * either chroot(8) or env(1) is used to run the command, * and they do suitable lookup. */ auto r = CalamaresUtils::System::runCommand( { "udevadm", "settle" }, std::chrono::seconds( 10 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not settle disks."; r.explainProcess( "udevadm", std::chrono::seconds( 10 ) ); } CalamaresUtils::System::runCommand( { "sync" }, std::chrono::seconds( 10 ) ); } calamares-3.2.41.1/src/libcalamares/partition/Sync.h000066400000000000000000000016541410275732300222060ustar00rootroot00000000000000/* === 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 PARTITION_SYNC_H #define PARTITION_SYNC_H #include "DllMacro.h" namespace CalamaresUtils { namespace Partition { /** @brief Run "udevadm settle" or other disk-sync mechanism. * * Call this after mounting, unmount, toggling swap, or other functions * that might cause the disk to be "busy" for other disk-modifying * actions (in particular, KPMcore actions with the sfdisk backend * are sensitive, and systemd tends to keep disks busy after a change * for a while). */ DLLEXPORT void sync(); /** @brief RAII class for calling sync() */ struct DLLEXPORT Syncer { ~Syncer() { sync(); } }; } // namespace Partition } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/partition/Tests.cpp000066400000000000000000000164361410275732300227330ustar00rootroot00000000000000/* === 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 "Global.h" #include "PartitionSize.h" #include "GlobalStorage.h" #include "utils/Logger.h" #include #include using SizeUnit = CalamaresUtils::Partition::SizeUnit; using PartitionSize = CalamaresUtils::Partition::PartitionSize; Q_DECLARE_METATYPE( SizeUnit ) class PartitionServiceTests : public QObject { Q_OBJECT public: PartitionServiceTests(); ~PartitionServiceTests() override; private Q_SLOTS: void initTestCase(); void testUnitComparison_data(); void testUnitComparison(); void testUnitNormalisation_data(); void testUnitNormalisation(); void testFilesystemGS(); }; PartitionServiceTests::PartitionServiceTests() {} PartitionServiceTests::~PartitionServiceTests() {} void PartitionServiceTests::initTestCase() { } void PartitionServiceTests::testUnitComparison_data() { QTest::addColumn< SizeUnit >( "u1" ); QTest::addColumn< SizeUnit >( "u2" ); QTest::addColumn< bool >( "comparable" ); QTest::newRow( "nones" ) << SizeUnit::None << SizeUnit::None << false; QTest::newRow( "none+%" ) << SizeUnit::None << SizeUnit::Percent << false; QTest::newRow( "%+none" ) << SizeUnit::Percent << SizeUnit::None << false; QTest::newRow( "KiB+none" ) << SizeUnit::KiB << SizeUnit::None << false; QTest::newRow( "none+MiB" ) << SizeUnit::None << SizeUnit::MiB << false; QTest::newRow( "KiB+KiB" ) << SizeUnit::KiB << SizeUnit::KiB << true; QTest::newRow( "KiB+MiB" ) << SizeUnit::KiB << SizeUnit::MiB << true; QTest::newRow( "KiB+GiB" ) << SizeUnit::KiB << SizeUnit::GiB << true; QTest::newRow( "MiB+MiB" ) << SizeUnit::MiB << SizeUnit::MiB << true; QTest::newRow( "MiB+GiB" ) << SizeUnit::MiB << SizeUnit::GiB << true; QTest::newRow( "GiB+GiB" ) << SizeUnit::GiB << SizeUnit::GiB << true; QTest::newRow( "%+None" ) << SizeUnit::Percent << SizeUnit::None << false; QTest::newRow( "%+%" ) << SizeUnit::Percent << SizeUnit::Percent << true; QTest::newRow( "%+KiB" ) << SizeUnit::Percent << SizeUnit::KiB << false; } static bool original_compare( SizeUnit m_unit, SizeUnit other_m_unit ) { if ( ( m_unit == SizeUnit::None || other_m_unit == SizeUnit::None ) || ( m_unit == SizeUnit::Percent && other_m_unit != SizeUnit::Percent ) || ( m_unit != SizeUnit::Percent && other_m_unit == SizeUnit::Percent ) ) { return false; } return true; } void PartitionServiceTests::testUnitComparison() { QFETCH( SizeUnit, u1 ); QFETCH( SizeUnit, u2 ); QFETCH( bool, comparable ); if ( comparable ) { QVERIFY( PartitionSize::unitsComparable( u1, u2 ) ); QVERIFY( PartitionSize::unitsComparable( u2, u1 ) ); } else { QVERIFY( !PartitionSize::unitsComparable( u1, u2 ) ); QVERIFY( !PartitionSize::unitsComparable( u2, u1 ) ); } QCOMPARE( original_compare( u1, u2 ), PartitionSize::unitsComparable( u1, u2 ) ); } /* Operator to make the table in testUnitNormalisation_data easier to write */ constexpr qint64 operator""_qi( unsigned long long m ) { return qint64( m ); } void PartitionServiceTests::testUnitNormalisation_data() { QTest::addColumn< SizeUnit >( "u1" ); QTest::addColumn< int >( "v" ); QTest::addColumn< qint64 >( "bytes" ); QTest::newRow( "none" ) << SizeUnit::None << 16 << -1_qi; QTest::newRow( "none" ) << SizeUnit::None << 0 << -1_qi; QTest::newRow( "none" ) << SizeUnit::None << -2 << -1_qi; QTest::newRow( "percent" ) << SizeUnit::Percent << 0 << -1_qi; QTest::newRow( "percent" ) << SizeUnit::Percent << 16 << -1_qi; QTest::newRow( "percent" ) << SizeUnit::Percent << -2 << -1_qi; QTest::newRow( "KiB" ) << SizeUnit::KiB << 0 << -1_qi; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1 << 1024_qi; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1000 << 1024000_qi; QTest::newRow( "KiB" ) << SizeUnit::KiB << 1024 << 1024 * 1024_qi; QTest::newRow( "KiB" ) << SizeUnit::KiB << -2 << -1_qi; QTest::newRow( "MiB" ) << SizeUnit::MiB << 0 << -1_qi; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1 << 1024 * 1024_qi; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1000 << 1024 * 1024000_qi; QTest::newRow( "MiB" ) << SizeUnit::MiB << 1024 << 1024 * 1024 * 1024_qi; QTest::newRow( "MiB" ) << SizeUnit::MiB << -2 << -1_qi; QTest::newRow( "GiB" ) << SizeUnit::GiB << 0 << -1_qi; QTest::newRow( "GiB" ) << SizeUnit::GiB << 1 << 1024_qi * 1024 * 1024_qi; // This one overflows 32-bits, which is why we want 64-bits for the whole table QTest::newRow( "GiB" ) << SizeUnit::GiB << 2 << 2048_qi * 1024 * 1024_qi; } void PartitionServiceTests::testUnitNormalisation() { QFETCH( SizeUnit, u1 ); QFETCH( int, v ); QFETCH( qint64, bytes ); QCOMPARE( PartitionSize( v, u1 ).toBytes(), bytes ); } void PartitionServiceTests::testFilesystemGS() { using CalamaresUtils::Partition::isFilesystemUsedGS; using CalamaresUtils::Partition::useFilesystemGS; // Some filesystems names, they don't have to be real const QStringList fsNames { "ext4", "zfs", "berries", "carrot" }; // Predicate to return whether we consider this FS in use auto pred = []( const QString& s ) { return !s.startsWith( 'z' ); }; // Fill the GS Calamares::GlobalStorage gs; for ( const auto& s : fsNames ) { useFilesystemGS( &gs, s, pred( s ) ); } QVERIFY( gs.contains( "filesystem_use" ) ); { const auto map = gs.value( "filesystem_use" ).toMap(); QCOMPARE( map.count(), fsNames.count() ); } for ( const auto& s : fsNames ) { QCOMPARE( isFilesystemUsedGS( &gs, s ), pred( s ) ); } QCOMPARE( isFilesystemUsedGS( &gs, QStringLiteral( "derp" ) ), false ); QCOMPARE( isFilesystemUsedGS( &gs, QString() ), false ); // But I can set a value for QString! useFilesystemGS( &gs, QString(), true ); QCOMPARE( isFilesystemUsedGS( &gs, QString() ), true ); // .. and replace it again useFilesystemGS( &gs, QString(), false ); QCOMPARE( isFilesystemUsedGS( &gs, QString() ), false ); // Now there is one more key { const auto map = gs.value( "filesystem_use" ).toMap(); QCOMPARE( map.count(), fsNames.count() + 1 ); } // The API says that it it case-insensitive QVERIFY( !isFilesystemUsedGS( &gs, "ZFS" ) ); QVERIFY( isFilesystemUsedGS( &gs, "EXT4" ) ); QCOMPARE( isFilesystemUsedGS( &gs, "ZFS" ), isFilesystemUsedGS( &gs, "zfs" ) ); QCOMPARE( isFilesystemUsedGS( &gs, "EXT4" ), isFilesystemUsedGS( &gs, "ext4" ) ); useFilesystemGS( &gs, "EXT4", false ); QVERIFY( !isFilesystemUsedGS( &gs, "EXT4" ) ); QCOMPARE( isFilesystemUsedGS( &gs, "EXT4" ), isFilesystemUsedGS( &gs, "ext4" ) ); useFilesystemGS( &gs, "ext4", true ); QVERIFY( isFilesystemUsedGS( &gs, "EXT4" ) ); CalamaresUtils::Partition::clearFilesystemGS( &gs ); QVERIFY( !isFilesystemUsedGS( &gs, "ZFS" ) ); QVERIFY( !isFilesystemUsedGS( &gs, "EXT4" ) ); QVERIFY( !isFilesystemUsedGS( &gs, "ext4" ) ); } QTEST_GUILESS_MAIN( PartitionServiceTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/libcalamares/partition/calautomount.cpp000066400000000000000000000031431410275732300243330ustar00rootroot00000000000000/* === 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. * * */ /** @brief Command-line tool to enable or disable automounting * * This application uses Calamares methods to enable or disable * automount settings in the running system. This can be used to * test the automount-manipulating code without running * a full Calamares or doing an installation. * */ static const char usage[] = "Usage: calautomount <-e|-d>\n" "\n" "Enables (if `-e` is passed as command-line option) or\n" "Disables (if `-d` is passed as command-line option)\n" "\n" "automounting of disks in the host system as best it can.\n" "Exits with code 0 on success or 1 if an unknown option is\n" "passed on the command-line.\n\n"; #include "AutoMount.h" #include "Sync.h" #include "utils/Logger.h" #include #include int main( int argc, char** argv ) { QCoreApplication app( argc, argv ); if ( ( argc != 2 ) || ( argv[ 1 ][ 0 ] != '-' ) || ( argv[ 1 ][ 1 ] != 'e' && argv[ 1 ][ 1 ] != 'd' ) ) { qWarning() << usage; return 1; } Logger::setupLogfile(); Logger::setupLogLevel( Logger::LOGDEBUG ); CalamaresUtils::Partition::automountDisable( argv[ 1 ][ 1 ] == 'd' ); return 0; } calamares-3.2.41.1/src/libcalamares/testdata/000077500000000000000000000000001410275732300207135ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/testdata/localetest_nl.ts000066400000000000000000000005601410275732300241140ustar00rootroot00000000000000 LocaleTests Quit Ophouden calamares-3.2.41.1/src/libcalamares/testdata/yaml-list.conf000066400000000000000000000002361410275732300234760ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # YAML dump --- "cow": "moo" "derp": 17 "dwarfs": - "sleepy" - "sneezy" - "doc" calamares-3.2.41.1/src/libcalamares/utils/000077500000000000000000000000001410275732300202425ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamares/utils/BoostPython.h000066400000000000000000000045101410275732300227030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ /* * The Python and Boost::Python headers are not C++14 warning-proof, especially * with picky compilers like Clang 8 and 9. Since we use Clang for the * find-all-the-warnings case, switch those warnings off for * the we-can't-change-them system headers. * * This convenience header handles including all the bits we need for * Python support, while silencing warnings. */ #ifndef UTILS_BOOSTPYTHON_H #define UTILS_BOOSTPYTHON_H #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wreserved-id-macro" #pragma clang diagnostic ignored "-Wold-style-cast" #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" #pragma clang diagnostic ignored "-Wextra-semi-stmt" #pragma clang diagnostic ignored "-Wall" #pragma clang diagnostic ignored "-Wimplicit-float-conversion" #pragma clang diagnostic ignored "-Wundef" #pragma clang diagnostic ignored "-Wdeprecated-dynamic-exception-spec" #pragma clang diagnostic ignored "-Wshadow-field-in-constructor" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wmissing-noreturn" #pragma clang diagnostic ignored "-Wcast-qual" #pragma clang diagnostic ignored "-Wcast-align" #pragma clang diagnostic ignored "-Wsign-conversion" #pragma clang diagnostic ignored "-Wdouble-promotion" #pragma clang diagnostic ignored "-Wredundant-parens" #pragma clang diagnostic ignored "-Wweak-vtables" #pragma clang diagnostic ignored "-Wdeprecated" #pragma clang diagnostic ignored "-Wmissing-field-initializers" #pragma clang diagnostic ignored "-Wdisabled-macro-expansion" #pragma clang diagnostic ignored "-Wdocumentation" #pragma clang diagnostic ignored "-Wcomma" #pragma clang diagnostic ignored "-Wunused-parameter" #pragma clang diagnostic ignored "-Wunused-template" // Actually for Python headers #pragma clang diagnostic ignored "-Wreserved-id-macro" #endif #undef slots #include #include #include #include #include #ifdef __clang__ #pragma clang diagnostic pop #endif #endif calamares-3.2.41.1/src/libcalamares/utils/CalamaresUtilsSystem.cpp000066400000000000000000000315311410275732300250670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "CalamaresUtilsSystem.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include #include #include #include #ifdef Q_OS_LINUX #include #endif #ifdef Q_OS_FREEBSD // clang-format off // these includes need to stay in-order (that's a FreeBSD thing) #include #include // 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 { System* System::s_instance = nullptr; System::System( bool doChroot, QObject* parent ) : QObject( parent ) , m_doChroot( doChroot ) { Q_ASSERT( !s_instance ); s_instance = this; if ( !doChroot && Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) { Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); } } System::~System() {} System* System::instance() { if ( !s_instance ) { cError() << "No Calamares system-object has been created."; cError() << Logger::SubEntry << "using a bogus instance instead."; return new System( true, nullptr ); } return s_instance; } ProcessResult System::runCommand( System::RunLocation location, const QStringList& args, const QString& workingPath, 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, while RunInTarget is specified"; 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" << Logger::NoQuote << 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" << Logger::NoQuote << output; return ProcessResult::Code::Crashed; } auto r = process.exitCode(); 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 { cDebug() << Logger::SubEntry << "Finished. Exit code:" << r; } } else // if ( r != 0 ) { if ( !output.isEmpty() ) { cDebug() << Logger::SubEntry << "Target cmd:" << RedactedList( args ) << "Exit code:" << r << "output:\n" << Logger::NoQuote << output; } else { cDebug() << Logger::SubEntry << "Target cmd:" << RedactedList( args ) << "Exit code:" << r << "(no output)"; } } return ProcessResult( r, output ); } /// @brief Cheap check if a path is absolute. static inline bool isAbsolutePath( const QString& path ) { return path.startsWith( '/' ); } QString System::targetPath( const QString& path ) const { if ( doChroot() ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; if ( !gs || !gs->contains( "rootMountPoint" ) ) { cWarning() << "No rootMountPoint in global storage, cannot name target file" << path; return QString(); } QString root = gs->value( "rootMountPoint" ).toString(); return isAbsolutePath( path ) ? ( root + path ) : ( root + '/' + path ); } else { return isAbsolutePath( path ) ? path : ( QStringLiteral( "/" ) + path ); } } CreationResult System::createTargetFile( const QString& path, const QByteArray& contents, WriteMode mode ) const { QString completePath = targetPath( path ); if ( completePath.isEmpty() ) { return CreationResult( CreationResult::Code::Invalid ); } QFile f( completePath ); if ( ( mode == WriteMode::KeepExisting ) && f.exists() ) { return CreationResult( CreationResult::Code::AlreadyExists ); } QIODevice::OpenMode m = #if QT_VERSION >= QT_VERSION_CHECK( 5, 11, 0 ) // New flag from Qt 5.11, implies WriteOnly ( mode == WriteMode::KeepExisting ? QIODevice::NewOnly : QIODevice::WriteOnly ) | #endif QIODevice::WriteOnly | QIODevice::Truncate; if ( !f.open( m ) ) { return CreationResult( CreationResult::Code::Failed ); } if ( f.write( contents ) != contents.size() ) { f.close(); f.remove(); return CreationResult( CreationResult::Code::Failed ); } f.close(); return CreationResult( QFileInfo( f ).canonicalFilePath() ); } void System::removeTargetFile( const QString& path ) const { if ( !isAbsolutePath( path ) ) { cWarning() << "Will not remove non-absolute path" << path; return; } QString target = targetPath( path ); if ( !target.isEmpty() ) { QFile::remove( target ); } // If it was empty, a warning was already printed } bool System::createTargetDirs( const QString& path ) const { if ( !isAbsolutePath( path ) ) { cWarning() << "Will not create basedirs for non-absolute path" << path; return false; } QString target = targetPath( path ); if ( target.isEmpty() ) { // If it was empty, a warning was already printed return false; } QString root = Calamares::JobQueue::instance()->globalStorage()->value( "rootMountPoint" ).toString(); if ( root.isEmpty() ) { return false; } QDir d( root ); if ( !d.exists() ) { cWarning() << "Root mountpoint" << root << "does not exist."; return false; } return d.mkpath( target ); // This re-does everything starting from the **host** / } bool System::createTargetParentDirs( const QString& filePath ) const { return createTargetDirs( QFileInfo( filePath ).dir().path() ); } QPair< quint64, float > System::getTotalMemoryB() const { #ifdef Q_OS_LINUX struct sysinfo i; int r = sysinfo( &i ); if ( r ) { return qMakePair( 0, 0.0 ); } return qMakePair( quint64( i.mem_unit ) * quint64( i.totalram ), 1.1 ); #elif defined( Q_OS_FREEBSD ) unsigned long memsize; size_t s = sizeof( memsize ); int r = sysctlbyname( "vm.kmem_size", &memsize, &s, NULL, 0 ); if ( r ) { return qMakePair( 0, 0.0 ); } return qMakePair( memsize, 1.01 ); #else return qMakePair( 0, 0.0 ); // Unsupported #endif } QString System::getCpuDescription() const { QString model; #ifdef Q_OS_LINUX QFile file( "/proc/cpuinfo" ); if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) ) while ( !file.atEnd() ) { QByteArray line = file.readLine(); if ( line.startsWith( "model name" ) && ( line.indexOf( ':' ) > 0 ) ) { model = QString::fromLatin1( line.right( line.length() - line.indexOf( ':' ) ) ); break; } } #elif defined( Q_OS_FREEBSD ) // This would use sysctl "hw.model", which has a string value #endif return model.simplified(); } quint64 System::getTotalDiskB() const { return 0; } bool System::doChroot() const { return m_doChroot; } Calamares::JobResult ProcessResult::explainProcess( int ec, const QString& command, const QString& output, std::chrono::seconds timeout ) { using Calamares::JobResult; if ( ec == 0 ) { return JobResult::ok(); } QString outputMessage = output.isEmpty() ? QCoreApplication::translate( "ProcessResult", "\nThere was no output from the command." ) : ( QCoreApplication::translate( "ProcessResult", "\nOutput:\n" ) + output ); if ( ec == static_cast< int >( ProcessResult::Code::Crashed ) ) //Crash! return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command crashed." ), QCoreApplication::translate( "ProcessResult", "Command %1 crashed." ).arg( command ) + outputMessage ); if ( ec == static_cast< int >( ProcessResult::Code::FailedToStart ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to start." ), QCoreApplication::translate( "ProcessResult", "Command %1 failed to start." ).arg( command ) ); if ( ec == static_cast< int >( ProcessResult::Code::NoWorkingDirectory ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "Internal error when starting command." ), QCoreApplication::translate( "ProcessResult", "Bad parameters for process job call." ) ); if ( ec == static_cast< int >( ProcessResult::Code::TimedOut ) ) return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command failed to finish." ), QCoreApplication::translate( "ProcessResult", "Command %1 failed to finish in %2 seconds." ) .arg( command ) .arg( timeout.count() ) + outputMessage ); //Any other exit code return JobResult::error( QCoreApplication::translate( "ProcessResult", "External command finished with errors." ), QCoreApplication::translate( "ProcessResult", "Command %1 finished with exit code %2." ) .arg( command ) .arg( ec ) + outputMessage ); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/CalamaresUtilsSystem.h000066400000000000000000000316651410275732300245440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_CALAMARESUTILSSYSTEM_H #define UTILS_CALAMARESUTILSSYSTEM_H #include "DllMacro.h" #include "Job.h" #include #include #include #include namespace CalamaresUtils { class ProcessResult : public QPair< int, QString > { public: enum class Code : int { Crashed = -1, // Must match special return values from QProcess FailedToStart = -2, // Must match special return values from QProcess NoWorkingDirectory = -3, TimedOut = -4 }; /** @brief Implicit one-argument constructor has no output, only a return code */ ProcessResult( Code r ) : QPair< int, QString >( static_cast< int >( r ), QString() ) { } ProcessResult( int r, QString s ) : QPair< int, QString >( r, s ) { } int getExitCode() const { return first; } QString getOutput() const { return second; } /** @brief Explain a typical external process failure. * * @param errorCode Return code from runCommand() or similar * (negative values get special explanation). The member * function uses the exit code stored in the ProcessResult * @param output (error) output from the command, used when there is * an error to report (exit code > 0). The member * function uses the output stored in the ProcessResult. * @param command String or split-up string of the command * that was invoked. * @param timeout Timeout passed to the process runner, for explaining * error code -4 (timeout). */ static Calamares::JobResult explainProcess( int errorCode, const QString& command, const QString& output, std::chrono::seconds timeout ); /// @brief Convenience wrapper for explainProcess() inline Calamares::JobResult explainProcess( const QString& command, std::chrono::seconds timeout ) const { return explainProcess( getExitCode(), command, getOutput(), timeout ); } /// @brief Convenience wrapper for explainProcess() inline Calamares::JobResult explainProcess( const QStringList& command, std::chrono::seconds timeout ) const { return explainProcess( getExitCode(), command.join( ' ' ), getOutput(), timeout ); } }; /** @brief The result of a create*() action, for status * * A CreationResult has a status field, can be converted to bool * (true only on success) and can report the full pathname of * the thing created if it was successful. */ class CreationResult : public QPair< int, QString > { public: enum class Code : int { // These are "not failed", but only OK is a success OK = 0, AlreadyExists = 1, // These are "failed" Invalid = -1, Failed = -2 }; CreationResult( Code r ) : QPair< int, QString >( static_cast< int >( r ), QString() ) { } explicit CreationResult( const QString& path ) : QPair< int, QString >( 0, path ) { } Code code() const { return static_cast< Code >( first ); } QString path() const { return second; } bool failed() const { return first < 0; } operator bool() const { return first == 0; } }; /** * @brief The System class is a singleton with utility functions that perform * system-specific operations. */ class DLLEXPORT System : public QObject { Q_OBJECT public: /** * @brief System the constructor. Only call this once in a Calamares instance. * @param doChroot set to true if all external commands should run in the * target system chroot, otherwise false to run everything on the current system. * @param parent the QObject parent. */ explicit System( bool doChroot, QObject* parent = nullptr ); ~System() override; static System* instance(); /** (Typed) Boolean describing where a particular command should be run, * whether in the host (live) system or in the (chroot) target system. */ enum class RunLocation { RunInHost, RunInTarget }; /** @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() in the host * * 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 ) { return runCommand( RunLocation::RunInHost, args, QString(), QString(), timeoutSec ); } /** @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. */ inline ProcessResult targetEnvCommand( const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return runCommand( m_doChroot ? RunLocation::RunInTarget : RunLocation::RunInHost, args, workingPath, stdInput, timeoutSec ); } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code */ inline int targetEnvCall( const QStringList& args, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvCommand( args, workingPath, stdInput, timeoutSec ).first; } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code */ inline int targetEnvCall( const QString& command, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvCall( QStringList { command }, workingPath, stdInput, timeoutSec ); } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code * * Places the called program's output in the @p output string. */ int targetEnvOutput( const QStringList& args, QString& output, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { auto r = targetEnvCommand( args, workingPath, stdInput, timeoutSec ); output = r.second; return r.first; } /** @brief Convenience wrapper for targetEnvCommand() which returns only the exit code * * Places the called program's output in the @p output string. */ inline int targetEnvOutput( const QString& command, QString& output, const QString& workingPath = QString(), const QString& stdInput = QString(), std::chrono::seconds timeoutSec = std::chrono::seconds( 0 ) ) { return targetEnvOutput( QStringList { command }, output, workingPath, stdInput, timeoutSec ); } /** @brief Gets a path to a file in the target system, from the host. * * @param path Path to the file; this is interpreted * from the root of the target system (whatever that may be, * but / in the chroot, or / in OEM modes). * * @return The complete path to the target file, from * the root of the host system, or empty on failure. * * For instance, during installation where the target root is * mounted on /tmp/calamares-something, asking for targetPath("/etc/passwd") * will give you /tmp/calamares-something/etc/passwd. * * No attempt is made to canonicalize anything, since paths might not exist. */ DLLEXPORT QString targetPath( const QString& path ) const; enum class WriteMode { KeepExisting, Overwrite }; /** @brief Create a (small-ish) file in the target system. * * @param path Path to the file; this is interpreted * from the root of the target system (whatever that may be, * but / in the chroot, or / in OEM modes). * @param contents Actual content of the file. * * If the target already exists: * - returns AlreadyExists as a result (and does not overwrite), * - **unless** @p mode is set to Overwrite, then it tries writing as * usual and will not return AlreadyExists. * * @return The complete canonical path to the target file from the * root of the host system, or empty on failure. (Here, it is * possible to be canonical because the file exists). */ DLLEXPORT CreationResult createTargetFile( const QString& path, const QByteArray& contents, WriteMode mode = WriteMode::KeepExisting ) const; /** @brief Remove 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 to see if the target file was really removed. */ DLLEXPORT void removeTargetFile( const QString& path ) const; /** @brief Ensure that the directory @p path exists * * @param path a full pathname to a desired directory. * * All the directory components including the last path component are * created, as needed. Returns true on success. * * @see QDir::mkpath */ DLLEXPORT bool createTargetDirs( const QString& path ) const; /** @brief Convenience to create parent directories of a file path. * * Creates all the parent directories until the last * component of @p filePath . @see createTargetDirs() */ DLLEXPORT bool createTargetParentDirs( const QString& filePath ) const; /** * @brief getTotalMemoryB returns the total main memory, in bytes. * * Since it is difficult to get the RAM memory size exactly -- either * by reading information from the DIMMs, which may fail on virtual hosts * or from asking the kernel, which doesn't report some memory areas -- * this returns a pair of guessed-size (in bytes) and a "guesstimate factor" * which says how good the guess is. Generally, assume the *real* memory * available is size * guesstimate. * * If nothing can be found, returns a 0 size and 0 guesstimate. * * @return size, guesstimate-factor */ DLLEXPORT QPair< quint64, float > getTotalMemoryB() const; /** * @brief getCpuDescription returns a string describing the CPU. * * Returns the value of the "model name" line in /proc/cpuinfo. */ DLLEXPORT QString getCpuDescription() const; /** * @brief getTotalDiskB returns the total disk attached, in bytes. * * If nothing can be found, returns a 0. */ DLLEXPORT quint64 getTotalDiskB() const; DLLEXPORT bool doChroot() const; private: static System* s_instance; bool m_doChroot; }; } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/CommandList.cpp000066400000000000000000000135331410275732300231650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #include "CommandList.h" #include "GlobalStorage.h" #include "JobQueue.h" // #include "utils/CalamaresUtils.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include namespace CalamaresUtils { static CommandLine get_variant_object( const QVariantMap& m ) { QString command = CalamaresUtils::getString( m, "command" ); qint64 timeout = CalamaresUtils::getInteger( m, "timeout", -1 ); if ( !command.isEmpty() ) { return CommandLine( command, timeout >= 0 ? std::chrono::seconds( timeout ) : CommandLine::TimeoutNotSet() ); } cWarning() << "Bad CommandLine element" << m; return CommandLine(); } static CommandList_t get_variant_stringlist( const QVariantList& l ) { CommandList_t retl; unsigned int count = 0; for ( const auto& v : l ) { if ( v.type() == QVariant::String ) { retl.append( CommandLine( v.toString(), CommandLine::TimeoutNotSet() ) ); } else if ( v.type() == QVariant::Map ) { auto command( get_variant_object( v.toMap() ) ); if ( command.isValid() ) { retl.append( command ); } // Otherwise warning is already given } else { cWarning() << "Bad CommandList element" << count << v.type() << v; } ++count; } return retl; } CommandList::CommandList( bool doChroot, std::chrono::seconds timeout ) : m_doChroot( doChroot ) , m_timeout( timeout ) { } CommandList::CommandList::CommandList( const QVariant& v, bool doChroot, std::chrono::seconds timeout ) : CommandList( doChroot, timeout ) { if ( v.type() == QVariant::List ) { const auto v_list = v.toList(); if ( v_list.count() ) { append( get_variant_stringlist( v_list ) ); } else { cWarning() << "Empty CommandList"; } } else if ( v.type() == QVariant::String ) { append( v.toString() ); } else if ( v.type() == QVariant::Map ) { auto c( get_variant_object( v.toMap() ) ); if ( c.isValid() ) { append( c ); } // Otherwise warning is already given } else { cWarning() << "CommandList does not understand variant" << v.type(); } } CommandList::~CommandList() {} static inline bool findInCommands( const CommandList& l, const QString& needle ) { for ( CommandList::const_iterator i = l.cbegin(); i != l.cend(); ++i ) if ( i->command().contains( needle ) ) { return true; } return false; } Calamares::JobResult CommandList::run() { QLatin1String rootMagic( "@@ROOT@@" ); QLatin1String userMagic( "@@USER@@" ); System::RunLocation location = m_doChroot ? System::RunLocation::RunInTarget : System::RunLocation::RunInHost; /* Figure out the replacement for @@ROOT@@ */ QString root = QStringLiteral( "/" ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); bool needsRootSubstitution = findInCommands( *this, rootMagic ); if ( needsRootSubstitution && ( location == System::RunLocation::RunInHost ) ) { if ( !gs || !gs->contains( "rootMountPoint" ) ) { cError() << "No rootMountPoint defined."; return Calamares::JobResult::error( QCoreApplication::translate( "CommandList", "Could not run command." ), QCoreApplication::translate( "CommandList", "The command runs in the host environment and needs to know the root " "path, but no rootMountPoint is defined." ) ); } root = gs->value( "rootMountPoint" ).toString(); } bool needsUserSubstitution = findInCommands( *this, userMagic ); if ( needsUserSubstitution && ( !gs || !gs->contains( "username" ) ) ) { cError() << "No username defined."; return Calamares::JobResult::error( QCoreApplication::translate( "CommandList", "Could not run command." ), QCoreApplication::translate( "CommandList", "The command needs to know the user's name, but no username is defined." ) ); } QString user = gs->value( "username" ).toString(); // may be blank if unset for ( CommandList::const_iterator i = cbegin(); i != cend(); ++i ) { QString processed_cmd = i->command(); processed_cmd.replace( rootMagic, root ).replace( userMagic, user ); bool suppress_result = false; if ( processed_cmd.startsWith( '-' ) ) { suppress_result = true; processed_cmd.remove( 0, 1 ); // Drop the - } QStringList shell_cmd { "/bin/sh", "-c" }; shell_cmd << processed_cmd; std::chrono::seconds timeout = i->timeout() >= std::chrono::seconds::zero() ? i->timeout() : m_timeout; ProcessResult r = System::runCommand( location, shell_cmd, QString(), QString(), timeout ); if ( r.getExitCode() != 0 ) { if ( suppress_result ) { cDebug() << "Error code" << r.getExitCode() << "ignored by CommandList configuration."; } else { return r.explainProcess( processed_cmd, timeout ); } } } return Calamares::JobResult::ok(); } void CommandList::append( const QString& s ) { append( CommandLine( s, m_timeout ) ); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/CommandList.h000066400000000000000000000045531410275732300226340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_COMMANDLIST_H #define UTILS_COMMANDLIST_H #include "Job.h" #include #include #include namespace CalamaresUtils { /** * Each command can have an associated timeout in seconds. The timeout * defaults to 10 seconds. Provide some convenience naming and construction. */ struct CommandLine : public QPair< QString, std::chrono::seconds > { static inline constexpr std::chrono::seconds TimeoutNotSet() { return std::chrono::seconds( -1 ); } /// An invalid command line CommandLine() : QPair( QString(), TimeoutNotSet() ) { } CommandLine( const QString& s ) : QPair( s, TimeoutNotSet() ) { } CommandLine( const QString& s, std::chrono::seconds t ) : QPair( s, t ) { } QString command() const { return first; } std::chrono::seconds timeout() const { return second; } bool isValid() const { return !first.isEmpty(); } }; /** @brief Abbreviation, used internally. */ using CommandList_t = QList< CommandLine >; /** * A list of commands; the list may have its own default timeout * for commands (which is then applied to each individual command * that doesn't have one of its own). * * Documentation for the format of commands can be found in * `shellprocess.conf`. */ class CommandList : protected CommandList_t { public: /** @brief empty command-list with timeout to apply to entries. */ CommandList( bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) ); CommandList( const QVariant& v, bool doChroot = true, std::chrono::seconds timeout = std::chrono::seconds( 10 ) ); ~CommandList(); bool doChroot() const { return m_doChroot; } Calamares::JobResult run(); using CommandList_t::at; using CommandList_t::cbegin; using CommandList_t::cend; using CommandList_t::const_iterator; using CommandList_t::count; using CommandList_t::isEmpty; protected: using CommandList_t::append; void append( const QString& ); private: bool m_doChroot; std::chrono::seconds m_timeout; }; } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Dirs.cpp000066400000000000000000000076521410275732300216610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * * Calamares is Free Software: see the License-Identifier above. * * */ #include "Dirs.h" #include "CalamaresConfig.h" #include "Logger.h" #include #include #include #include #include #include #include using std::cerr; namespace CalamaresUtils { static QDir s_appDataDir( CMAKE_INSTALL_FULL_DATADIR ); static bool s_isAppDataDirOverridden = false; static bool s_haveExtraDirs = false; static QStringList s_extraConfigDirs; static QStringList s_extraDataDirs; static bool isWritableDir( const QDir& dir ) { // We log with cerr here because we might be looking for the log dir QString path = dir.absolutePath(); if ( !dir.exists() ) { if ( !dir.mkpath( "." ) ) { cerr << "warning: failed to create " << qPrintable( path ) << '\n'; return false; } return true; } QFileInfo info( path ); if ( !info.isDir() ) { cerr << "warning: " << qPrintable( path ) << " is not a dir\n"; return false; } if ( !info.isWritable() ) { cerr << "warning: " << qPrintable( path ) << " is not writable\n"; return false; } return true; } void setAppDataDir( const QDir& dir ) { s_appDataDir = dir; s_isAppDataDirOverridden = true; } /* Split $ENV{@p name} on :, append to @p l, making sure each ends in / */ static void mungeEnvironment( QStringList& l, const char* name, const char* defaultDirs ) { static const QString calamaresSubdir = QStringLiteral( "calamares/" ); QStringList dirs = QString( qgetenv( name ) ).split( ':' ); if ( dirs.isEmpty() ) { dirs = QString( defaultDirs ).split( ':' ); } for ( auto s : dirs ) { if ( s.isEmpty() ) { continue; } if ( s.endsWith( '/' ) ) { l << ( s + calamaresSubdir ) << s; } else { l << ( s + '/' + calamaresSubdir ) << ( s + '/' ); } } } void setXdgDirs() { mungeEnvironment( s_extraConfigDirs, "XDG_CONFIG_DIRS", "/etc/xdg" ); mungeEnvironment( s_extraDataDirs, "XDG_DATA_DIRS", "/usr/local/share/:/usr/share/" ); s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() ); } QStringList extraConfigDirs() { if ( s_haveExtraDirs ) { return s_extraConfigDirs; } return QStringList(); } QStringList extraDataDirs() { if ( s_haveExtraDirs ) { return s_extraDataDirs; } return QStringList(); } bool haveExtraDirs() { return s_haveExtraDirs && ( !s_extraConfigDirs.isEmpty() || !s_extraDataDirs.isEmpty() ); } bool isAppDataDirOverridden() { return s_isAppDataDirOverridden; } QDir appDataDir() { return s_appDataDir; } QDir systemLibDir() { QDir path( CMAKE_INSTALL_FULL_LIBDIR ); return path; } QDir appLogDir() { QString path = QStandardPaths::writableLocation( QStandardPaths::CacheLocation ); QDir dir( path ); if ( isWritableDir( dir ) ) { return dir; } cerr << "warning: Could not find a standard writable location for log dir, falling back to $HOME\n"; dir = QDir::home(); if ( isWritableDir( dir ) ) { return dir; } cerr << "warning: Found no writable location for log dir, falling back to the temp dir\n"; return QDir::temp(); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/Dirs.h000066400000000000000000000034531410275732300213210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_DIRS_H #define UTILS_DIRS_H #include "DllMacro.h" #include namespace CalamaresUtils { /** * @brief appDataDir returns the directory with common application data. * Defaults to CMAKE_INSTALL_FULL_DATADIR (usually /usr/share/calamares). */ DLLEXPORT QDir appDataDir(); /** * @brief appLogDir returns the directory for Calamares logs. * Defaults to QStandardPaths::CacheLocation (usually ~/.cache/Calamares). */ DLLEXPORT QDir appLogDir(); /** * @brief systemLibDir returns the system's lib directory. * Defaults to CMAKE_INSTALL_FULL_LIBDIR (usually /usr/lib64 or /usr/lib). */ DLLEXPORT QDir systemLibDir(); /** * Override app data dir. Only for testing purposes. */ DLLEXPORT void setAppDataDir( const QDir& dir ); DLLEXPORT bool isAppDataDirOverridden(); /** @brief Setup extra config and data dirs from the XDG variables. */ DLLEXPORT void setXdgDirs(); /** @brief Are any extra directories configured? */ DLLEXPORT bool haveExtraDirs(); /** @brief XDG_CONFIG_DIRS, each guaranteed to end with / */ DLLEXPORT QStringList extraConfigDirs(); /** @brief XDG_DATA_DIRS, each guaranteed to end with / */ DLLEXPORT QStringList extraDataDirs(); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Entropy.cpp000066400000000000000000000057711410275732300224200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "Entropy.h" #include #include CalamaresUtils::EntropySource CalamaresUtils::getEntropy( int size, QByteArray& b ) { b.clear(); if ( size < 1 ) { return EntropySource::None; } b.resize( size ); char* buffer = b.data(); std::fill( buffer, buffer + size, 0xcb ); qint64 readSize = 0; QFile urandom( "/dev/urandom" ); if ( urandom.exists() && urandom.open( QIODevice::ReadOnly ) ) { readSize = urandom.read( buffer, size ); urandom.close(); } if ( readSize >= size ) { return EntropySource::URandom; } // If it wasn't available, or did not return enough bytes, // complete it with twister (and tell the client). std::random_device r; std::seed_seq seed { r(), r(), r(), r(), r(), r(), r(), r() }; std::mt19937_64 twister( seed ); std::uint64_t next = 0; do { next = twister(); // Eight times, for a 64-bit next #define GET_ONE_BYTE \ if ( readSize < size ) \ { \ buffer[ readSize++ ] = char( next & 0xffU ); \ next = next >> 8; \ } GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE GET_ONE_BYTE } while ( readSize < size ); return EntropySource::Twister; } CalamaresUtils::EntropySource CalamaresUtils::getPrintableEntropy( int size, QString& s ) { s.clear(); if ( size < 1 ) { return EntropySource::None; } static const char salt_chars[] = { '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; static_assert( sizeof( salt_chars ) == 64, "Missing salt_chars" ); // Number of bytes we're going to need int byteSize = ( ( size * 6 ) / 8 ) + 1; QByteArray b; EntropySource r = getEntropy( byteSize, b ); int bitsLeft = 0; int byteOffset = 0; qint64 next = 0; do { if ( bitsLeft < 6 ) { next = ( next << 8 ) | b.at( byteOffset++ ); bitsLeft += 8; } char c = salt_chars[ next & 0b0111111 ]; next >>= 6; bitsLeft -= 6; s.append( c ); } while ( ( s.length() < size ) && ( byteOffset < b.size() ) ); if ( s.length() < size ) { // It's incomplete, not really no-entropy return EntropySource::None; } return r; } calamares-3.2.41.1/src/libcalamares/utils/Entropy.h000066400000000000000000000024141410275732300220540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_ENTROPY_H #define UTILS_ENTROPY_H #include "DllMacro.h" #include namespace CalamaresUtils { /// @brief Which entropy source was actually used for the entropy. enum class EntropySource { None, ///< Buffer is empty, no random data URandom, ///< Read from /dev/urandom Twister ///< Generated by pseudo-random }; /** @brief Fill buffer @p b with exactly @p size random bytes * * The array is cleared and resized, then filled with 0xcb * "just in case", after which it is filled with random * bytes from a suitable source. Returns which source was used. */ DLLEXPORT EntropySource getEntropy( int size, QByteArray& b ); /** @brief Fill string @p s with exactly @p size random printable ASCII characters * * The characters are picked from a set of 64 (2^6). The string * contains 6 * size bits of entropy. * Returns which source was used. * @see getEntropy */ DLLEXPORT EntropySource getPrintableEntropy( int size, QString& s ); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Logger.cpp000066400000000000000000000123431410275732300221700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #include "Logger.h" #include "CalamaresVersionX.h" #include "utils/Dirs.h" #include #include #include #include #include #include #include #include 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::LOGDEBUG; // Comparison is < in log() function #endif static QMutex s_mutex; static const char s_Continuation[] = "\n "; static const char s_SubEntry[] = " .. "; namespace Logger { void setupLogLevel( unsigned int level ) { if ( level > LOGVERBOSE ) { level = LOGVERBOSE; } s_threshold = level + 1; // Comparison is < in log() function } bool logLevelEnabled( unsigned int level ) { return level < s_threshold; } unsigned int logLevel() { return s_threshold > 0 ? s_threshold - 1 : 0; } static void log( const char* msg, unsigned int debugLevel, bool withTime = true ) { if ( logLevelEnabled( debugLevel ) ) { QMutexLocker lock( &s_mutex ); // If we don't format the date as a Qt::ISODate then we get a crash when // logging at exit as Qt tries to use QLocale to format, but QLocale is // on its way out. logfile << QDate::currentDate().toString( Qt::ISODate ).toUtf8().data() << " - " << QTime::currentTime().toString().toUtf8().data() << " [" << QString::number( debugLevel ).toUtf8().data() << "]: " << msg << std::endl; logfile.flush(); if ( withTime ) { std::cout << QTime::currentTime().toString().toUtf8().data() << " [" << QString::number( debugLevel ).toUtf8().data() << "]: "; } std::cout << msg << std::endl; } } static void CalamaresLogHandler( QtMsgType type, const QMessageLogContext&, const QString& msg ) { static QMutex s_mutex; QByteArray ba = msg.toUtf8(); const char* message = ba.constData(); QMutexLocker locker( &s_mutex ); switch ( type ) { case QtInfoMsg: log( message, LOGVERBOSE ); break; case QtDebugMsg: log( message, LOGDEBUG ); break; case QtWarningMsg: log( message, LOGWARNING ); break; case QtCriticalMsg: case QtFatalMsg: log( message, LOGERROR ); break; } } QString logFile() { return CalamaresUtils::appLogDir().filePath( "session.log" ); } void setupLogfile() { if ( QFileInfo( logFile().toLocal8Bit() ).size() > LOGFILE_SIZE ) { QByteArray lc; { QFile f( logFile().toLocal8Bit() ); f.open( QIODevice::ReadOnly | QIODevice::Text ); lc = f.readAll(); f.close(); } QFile::remove( logFile().toLocal8Bit() ); { QFile f( logFile().toLocal8Bit() ); f.open( QIODevice::WriteOnly | QIODevice::Text ); f.write( lc.right( LOGFILE_SIZE - ( LOGFILE_SIZE / 4 ) ) ); f.close(); } } // Since the log isn't open yet, this probably only goes to stdout cDebug() << "Using log file:" << logFile(); // Lock while (re-)opening the logfile { QMutexLocker lock( &s_mutex ); logfile.open( logFile().toLocal8Bit(), std::ios::app ); if ( logfile.tellp() ) { logfile << "\n\n" << std::endl; } logfile << "=== START CALAMARES " << CALAMARES_VERSION << std::endl; } qInstallMessageHandler( CalamaresLogHandler ); } CDebug::CDebug( unsigned int debugLevel, const char* func ) : QDebug( &m_msg ) , m_debugLevel( debugLevel ) , m_funcinfo( func ) { if ( debugLevel <= LOGERROR ) { m_msg = QStringLiteral( "ERROR: " ); } else if ( debugLevel <= LOGWARNING ) { m_msg = QStringLiteral( "WARNING: " ); } } CDebug::~CDebug() { if ( logLevelEnabled( m_debugLevel ) ) { 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 ); } } constexpr FuncSuppressor::FuncSuppressor( const char s[] ) : m_s( 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 ) { auto t = v.type(); if ( t == QVariant::List ) { QStringList s; auto l = v.toList(); for ( auto lit = l.constBegin(); lit != l.constEnd(); ++lit ) { s << lit->toString(); } return s.join( ", " ); } else { return v.toString(); } } } // namespace Logger calamares-3.2.41.1/src/libcalamares/utils/Logger.h000066400000000000000000000175351410275732300216450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * * */ #ifndef UTILS_LOGGER_H #define UTILS_LOGGER_H #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, LOGDEBUG = 6, LOGVERBOSE = 8 }; class DLLEXPORT CDebug : public QDebug { public: explicit CDebug( unsigned int debugLevel = LOGDEBUG, const char* func = nullptr ); virtual ~CDebug(); friend CDebug& operator<<( CDebug&&, const FuncSuppressor& ); friend CDebug& operator<<( CDebug&&, const Once& ); inline unsigned int level() const { return m_debugLevel; } private: QString m_msg; unsigned int m_debugLevel; const char* m_funcinfo = nullptr; }; inline CDebug& operator<<( CDebug&& s, const FuncSuppressor& f ) { s.m_funcinfo = nullptr; s << f.m_s; return s; } inline QDebug& 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. */ DLLEXPORT QString logFile(); /** * @brief Start logging to the log file. * * Call this (once) to start logging to the log file (usually * ~/.cache/calamares/session.log ). An existing log file is * rolled over if it is too large. */ DLLEXPORT void setupLogfile(); /** * @brief Set a log level for future logging. * * Pass in a value from the LOG* enum, above. Use 0 to * disable logging. Values greater than LOGVERBOSE are * limited to LOGVERBOSE, which will log everything. * * Practical values are 0, 1, 2, and 6. */ DLLEXPORT void setupLogLevel( unsigned int level ); /** @brief Return the configured log-level. */ DLLEXPORT unsigned int logLevel(); /** @brief Would the given @p level really be logged? */ DLLEXPORT bool logLevelEnabled( unsigned int level ); /** * @brief Row-oriented formatted logging. * * Use DebugRow to produce multiple rows of 2-column output * in a debugging statement. For instance, * cDebug() << DebugRow(1,12) * << DebugRow(2,24) * will produce a single timestamped debug line with continuations. * Each DebugRow produces one line of output, with the two values. */ template < typename T, typename U > struct DebugRow { public: explicit DebugRow( const T& t, const U& u ) : first( t ) , second( u ) { } const T& first; const U& second; }; /** * @brief List-oriented formatted logging. * * Use DebugList to produce multiple rows of output in a debugging * statement. For instance, * cDebug() << DebugList( QStringList() << "foo" << "bar" ) * will produce a single timestamped debug line with continuations. * Each element of the list of strings will be logged on a separate line. */ /* TODO: Calamares 3.3, bump requirements to C++17, and rename * this to DebugList, dropping the convenience-definition * below. In C++17, class template argument deduction is * added, so `DebugList( whatever )` determines the right * type already (also for QStringList). */ template < typename T > struct DebugListT { using list_t = QList< T >; explicit DebugListT( const list_t& l ) : list( l ) { } const list_t& list; }; ///@brief Convenience for QStringList, needs no template parameters struct DebugList : public DebugListT< QString > { explicit DebugList( const list_t& l ) : DebugListT( l ) { } }; /** * @brief Map-oriented formatted logging. * * Use DebugMap to produce multiple rows of output in a debugging * statement from a map. The output is intentionally a bit-yaml-ish. * cDebug() << DebugMap( map ) * will produce a single timestamped debug line with continuations. * The continued lines will have a key (from the map) and a value * on each line. */ struct DebugMap { public: explicit DebugMap( const QVariantMap& m ) : map( m ) { } const QVariantMap& map; }; /** * @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& operator<<( QDebug& s, const DebugRow< T, U >& t ) { s << Continuation << t.first << ':' << ' ' << t.second; return s; } /** @brief output operator for DebugList, assuming operator<< for T exists */ template < typename T = QString > inline QDebug& operator<<( QDebug& s, const DebugListT< T >& c ) { for ( const auto& i : c.list ) { s << Continuation << i; } return s; } /** @brief supporting method for outputting a DebugMap */ QString toString( const QVariant& v ); /** @brief output operator for DebugMap */ inline QDebug& operator<<( QDebug& s, const DebugMap& t ) { for ( auto it = t.map.constBegin(); it != t.map.constEnd(); ++it ) { s << Continuation << it.key().toUtf8().constData() << ':' << ' ' << toString( it.value() ).toUtf8().constData(); } 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& ); 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 ) #endif calamares-3.2.41.1/src/libcalamares/utils/NamedEnum.h000066400000000000000000000215561410275732300222750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ /** @brief Support for "named" enumerations * * 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 #define UTILS_NAMEDENUM_H #include #include #include #include /** @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 { using string_t = QString; using enum_t = T; using pair_t = std::pair< string_t, enum_t >; using type = std::vector< pair_t >; type table; /** @brief Create a table of named enum values. * * 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 ) { /* static_assert( v.size() > 0 ); */ } /** @brief Find a name @p s in the table. * * Searches case-insensitively. * * 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 @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 { ok = false; for ( const auto& p : table ) if ( 0 == QString::compare( s, p.first, Qt::CaseInsensitive ) ) { ok = true; return p.second; } // ok is still false return table.begin()->second; } /** @brief Find a name @p s in the table. * * 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 { ok = false; for ( const auto& p : table ) if ( s == p.second ) { ok = true; return p.first; } // 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. * * 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 ) { return static_cast< typename std::underlying_type< E >::type >( e ); } #endif calamares-3.2.41.1/src/libcalamares/utils/NamedSuffix.h000066400000000000000000000052511410275732300226270ustar00rootroot00000000000000/* === 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. * * */ /** @brief Support for unit-suffixed values. * * This combines a value with an (enum) unit indicating what kind * of value it is, e.g. 10 meters, or 64 pixels. Includes simple * parsing support for the values written as strings like , * e.g. "10m" or "64px". * * When a suffixed unit value needs validation, define an isValid() * method; similarly for simple construction from a string (with a fixed * table of suffixes). Typical use then looks like: * * class MyUnit : public NamedSuffix * { * public: * using NamedSuffix::NamedSuffix; // Keep existing constructors * MyUnit( const QString& s ); * bool isValid() const; * } ; */ #ifndef UTILS_NAMEDSUFFIX_H #define UTILS_NAMEDSUFFIX_H #include "NamedEnum.h" /** @brief Template that takes the enum type to work with and a special none-enum. */ template < typename T, T _none > class NamedSuffix { public: using unit_t = T; static constexpr unit_t none = _none; /** @brief Empty value. */ NamedSuffix() : m_value( 0 ) , m_unit( none ) { } /** @brief Specific value and unit. */ NamedSuffix( qint64 value, unit_t unit ) : m_value( value ) , m_unit( unit ) { } /** @brief Construct value and unit from string. * * This parses the given string @p s by comparing with the suffixes * in @p table and uses the first matching suffix as the unit. */ NamedSuffix( const NamedEnumTable< T >& table, const QString& s ) : NamedSuffix() { for ( const auto& suffix : table.table ) if ( s.endsWith( suffix.first ) ) { m_value = s.left( s.length() - suffix.first.length() ).toLongLong(); m_unit = suffix.second; break; } } /** @brief Construct value from string. * * This is not defined in the template, because it should probably * delegate to the constructor above with a fixed table. */ NamedSuffix( const QString& s ); qint64 value() const { return m_value; } unit_t unit() const { return m_unit; } /** @brief Check that a value-unit combination is valid. * * This is not defined in the template, because validity (e.g. * range of acceptable values) depends on the kind of unit. */ bool isValid() const; protected: qint64 m_value; unit_t m_unit; }; #endif calamares-3.2.41.1/src/libcalamares/utils/Permissions.cpp000066400000000000000000000054431410275732300232670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Scott Harvey * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "Permissions.h" #include "Logger.h" #include #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 ( QProcess::execute( "chown", { p.username() + ':' + p.group(), path } ) ) { 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 calamares-3.2.41.1/src/libcalamares/utils/Permissions.h000066400000000000000000000064261410275732300227360ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/utils/PluginFactory.cpp000066400000000000000000000005321410275732300235340ustar00rootroot00000000000000/* === 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 "PluginFactory.h" CalamaresPluginFactory::~CalamaresPluginFactory() {} calamares-3.2.41.1/src/libcalamares/utils/PluginFactory.h000066400000000000000000000057221410275732300232070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 * SPDX-FileCopyrightText: 2007 Matthias Kretz * SPDX-FileCopyrightText: 2007 Bernhard Loos * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_PLUGINFACTORY_H #define UTILS_PLUGINFACTORY_H #include #define CalamaresPluginFactory_iid "io.calamares.PluginFactory" /** @brief Plugin factory for Calamares * * Try to re-use KPluginFactory as much as possible (since the * old code for PluginFactory was a fork of an old version of * exactly that). * * The current createInstance() method passes more arguments * to the job and viewstep constructors than we want; chasing * that change means modifying each Calamares module. This class * implements a version of createInstance() with fewer arguments * and overloads registerPlugin() to use that. */ class CalamaresPluginFactory : public KPluginFactory { Q_OBJECT public: explicit CalamaresPluginFactory() : KPluginFactory() { } ~CalamaresPluginFactory() override; /** @brief Create an object from the factory. * * Ignores all the @p args since they are not used. Calls * Calamares constructors for the Jobs and ViewSteps. */ template < class impl, class ParentType > static QObject* createInstance( QWidget* parentWidget, QObject* parent, const QVariantList& args ) { Q_UNUSED( parentWidget ) Q_UNUSED( args ) ParentType* p = nullptr; if ( parent ) { p = qobject_cast< ParentType* >( parent ); Q_ASSERT( p ); } return new impl( p ); } /** @brief register a plugin * * The Calamares version doesn't accept keywords, and uses * the Calamares createInstance() version which ignores * the QVariantList of arguments. */ template < class T > void registerPlugin() { KPluginFactory::registerPlugin< T >( QString(), &createInstance< T, QObject > ); } }; /** @brief declare a Calamares Plugin Factory * * This would be defined as K_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY, * except that does not actually use the base factory class that is * passed in. */ #define CALAMARES_PLUGIN_FACTORY_DECLARATION( name ) \ class name : public CalamaresPluginFactory \ { \ Q_OBJECT \ Q_INTERFACES( KPluginFactory ) \ Q_PLUGIN_METADATA( IID CalamaresPluginFactory_iid ) \ public: \ explicit name(); \ ~name() override; \ }; #define CALAMARES_PLUGIN_FACTORY_DEFINITION( name, pluginRegistrations ) \ K_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY( name, CalamaresPluginFactory, pluginRegistrations ) #endif calamares-3.2.41.1/src/libcalamares/utils/RAII.h000066400000000000000000000047551410275732300211520ustar00rootroot00000000000000/* === 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_RAII_H #define UTILS_RAII_H #include #include #include #include /** @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 ( !preserve ) { if ( p ) { p->deleteLater(); } p = nullptr; } } }; /// @brief Sets a bool to @p value and resets to !value on destruction template < bool value > struct cBoolSetter { bool& m_b; cBoolSetter( bool& b ) : m_b( b ) { m_b = value; } ~cBoolSetter() { m_b = !value; } }; /// @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. */ template < typename T > struct cPointerSetter { 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. */ cPointerSetter( T* p ) : m_pointer( p ) { } /** @brief Create a setter with a 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). */ cPointerSetter( T* p, T v ) : m_value( v ) , m_pointer( p ) { } ~cPointerSetter() { if ( m_pointer && m_value.has_value() ) { *m_pointer = m_value.value(); } } const T& operator=( const T& v ) { m_value = v; return v; } }; template < typename T > cPointerSetter( T p )->cPointerSetter< decltype( *p ) >; #endif calamares-3.2.41.1/src/libcalamares/utils/Retranslator.cpp000066400000000000000000000153541410275732300234360ustar00rootroot00000000000000/* === 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. * * */ #include "Retranslator.h" #include "Settings.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include #include #include #include static bool s_allowLocalTranslations = false; /** @brief Helper class for loading translations * * This is used by the loadSingletonTranslator() function to hand off * work to translation-type specific code. */ 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 ) ) { } virtual ~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 ) : TranslationLoader( locale ) , m_prefix( prefix ) { } bool tryLoad( QTranslator* translator ) override; QString m_prefix; }; /// @brief Loads regular Calamares translations (program text) struct CalamaresLoader : public TranslationLoader { using TranslationLoader::TranslationLoader; bool tryLoad( QTranslator* translator ) override; }; /// @brief Loads timezone name translations struct TZLoader : public TranslationLoader { using TranslationLoader::TranslationLoader; bool tryLoad( QTranslator* translator ) override; }; TranslationLoader::~TranslationLoader() {} bool BrandingLoader::tryLoad( QTranslator* translator ) { if ( m_prefix.isEmpty() ) { return false; } QString brandingTranslationsDirPath( m_prefix ); brandingTranslationsDirPath.truncate( m_prefix.lastIndexOf( QDir::separator() ) ); QDir brandingTranslationsDir( brandingTranslationsDirPath ); if ( brandingTranslationsDir.exists() ) { QString filenameBase( m_prefix ); filenameBase.remove( 0, m_prefix.lastIndexOf( QDir::separator() ) + 1 ); if ( translator->load( m_locale, filenameBase, "_", brandingTranslationsDir.absolutePath() ) ) { cDebug() << Logger::SubEntry << "Branding using locale:" << m_localeName; return true; } else { cDebug() << Logger::SubEntry << "Branding no translation for" << m_localeName << "using default (en)"; // TODO: this loads something completely different return translator->load( m_prefix + "en" ); } } return false; } static bool tryLoad( QTranslator* translator, const QString& prefix, const QString& localeName ) { // In debug-mode, try loading from the current directory if ( s_allowLocalTranslations && translator->load( prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded local translation" << prefix << localeName; return true; } // Or load from appDataDir -- often /usr/share/calamares -- subdirectory land/ QDir localeData( CalamaresUtils::appDataDir() ); if ( localeData.exists() && translator->load( localeData.absolutePath() + QStringLiteral( "/lang/" ) + prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded appdata translation" << prefix << localeName; return true; } // Or from QRC (most common) if ( translator->load( QStringLiteral( ":/lang/" ) + prefix + localeName ) ) { cDebug() << Logger::SubEntry << "Loaded QRC translation" << prefix << localeName; return true; } else { cDebug() << Logger::SubEntry << "No translation for" << prefix << localeName << "using default (en)"; return translator->load( QStringLiteral( ":/lang/" ) + prefix + QStringLiteral( "en" ) ); } } bool CalamaresLoader::tryLoad( QTranslator* translator ) { return ::tryLoad( translator, QStringLiteral( "calamares_" ), m_localeName ); } bool TZLoader::tryLoad( QTranslator* translator ) { return ::tryLoad( translator, QStringLiteral( "tz_" ), m_localeName ); } static void loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p ) { if ( !translator_p ) { QTranslator* translator = new QTranslator(); loader.tryLoad( translator ); QCoreApplication::installTranslator( translator ); translator_p = translator; } else { loader.tryLoad( translator_p ); } } namespace CalamaresUtils { static QTranslator* s_brandingTranslator = nullptr; static QTranslator* s_translator = nullptr; static QTranslator* s_tztranslator = nullptr; static QString s_translatorLocaleName; void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix ) { loadSingletonTranslator( BrandingLoader( locale, brandingTranslationsPrefix ), s_brandingTranslator ); loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); loadSingletonTranslator( CalamaresLoader( locale ), s_translator ); s_translatorLocaleName = CalamaresLoader::mungeLocaleName( locale ); } QString translatorLocaleName() { return s_translatorLocaleName; } bool loadTranslator( const QLocale& locale, const QString& prefix, QTranslator* translator ) { return ::tryLoad( translator, prefix, locale.name() ); } Retranslator::Retranslator( QObject* parent ) : QObject( parent ) { } bool Retranslator::eventFilter( QObject* obj, QEvent* e ) { if ( e->type() == QEvent::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 f) { connect( instance(), &Retranslator::languageChanged, o, f ); f(); } void setAllowLocalTranslation( bool allow ) { s_allowLocalTranslations = allow; } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/Retranslator.h000066400000000000000000000116541410275732300231020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_RETRANSLATOR_H #define UTILS_RETRANSLATOR_H #include "DllMacro.h" #include #include #include #include class QEvent; class QLocale; class QTranslator; namespace CalamaresUtils { /** * @brief installTranslator changes the application language. * @param locale the new locale. * @param brandingTranslationsPrefix the branding path prefix, from Calamares::Branding. */ DLLEXPORT void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix ); /** @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 QString 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 QLocale& locale, const QString& prefix, QTranslator* translator ); /** @brief Set @p allow to true to load translations from current dir. * * If false, (or never called) the translations are loaded only from * system locations (the AppData dir) and from QRC (compiled in). * Enable local translations to test translations stored in the * current directory. */ 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 Gets the global (single) Retranslator object static Retranslator* instance(); /// @brief Helper function for attaching lambdas static void attach( QObject* o, std::function< void( void ) > f); signals: void languageChanged(); protected: bool eventFilter( QObject* obj, QEvent* e ) override; private: explicit Retranslator( QObject* parent ); }; } // namespace CalamaresUtils /** @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 \ { \ connect( CalamaresUtils::Retranslator::instance(), &CalamaresUtils::Retranslator::languageChanged, this, slotfunc ); \ (this->*slotfunc)(); \ } while ( false ) #endif calamares-3.2.41.1/src/libcalamares/utils/String.cpp000066400000000000000000000167211410275732300222230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * * Calamares is Free Software: see the License-Identifier above. * * */ #include "String.h" #include "Logger.h" #include namespace CalamaresUtils { QString removeDiacritics( const QString& string ) { // *INDENT-OFF* // clang-format off // Map these extended-Latin characters to ASCII; keep the // layout so that one line in *diacriticLetters* corresponds // to one line of replacements in *noDiacriticLetters*. static const QString diacriticLetters = QString::fromUtf8( "ŠŒŽšœžŸ¥µÀ" "ÁÂÃÄÅÆÇÈÉÊ" "ËÌÍÎÏÐÑÒÓÔ" "ÕÖØÙÚÛÜÝßà" "áâãäåæçèéê" "ëìíîïðñòóô" "õöøùúûüýÿÞ" "þČčĆćĐ𩹮" "žŞşĞğİıȚțȘ" "șĂăŐőŰűŘřĀ" "āĒēĪīŌōŪūŢ" "ţẀẁẂẃŴŵŶŷĎ" "ďĚěŇňŤťŮůŔ" "ॹĘꣳŃńŚ" "śŹźŻż" ); static const QStringList noDiacriticLetters = { "S", "OE", "Z", "s", "oe", "z", "Y", "Y", "u", "A", "A", "A", "A", "A", "AA", "AE", "C", "E", "E", "E", "E", "I", "I", "I", "I", "D", "N", "O", "O", "O", "O", "E", "OE", "U", "U", "U", "E", "Y", "s", "a", "a", "a", "a", "e", "aa", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "o", "o", "o", "o", "e", "oe", "u", "u", "u", "e", "y", "y", "TH", "th", "C", "c", "C", "c", "DJ", "dj", "S", "s", "Z", "z", "S", "s", "G", "g", "I", "i", "T", "t", "S", "s", "A", "a", "O", "o", "U", "u", "R", "r", "A", "a", "E", "e", "I", "i", "O", "o", "U", "u", "T", "t", "W", "w", "W", "w", "W", "w", "Y", "y", "D", "d", "E", "e", "N", "n", "T", "t", "U", "u", "R", "r", "A", "a", "E", "e", "L", "l", "N", "n", "S", "s", "Z", "z", "Z", "z" }; // clang-format on // *INDENT-ON* QString output; for ( const QChar& c : string ) { int i = diacriticLetters.indexOf( c ); if ( i < 0 ) { output.append( c ); } else { QString replacement = noDiacriticLetters[ i ]; output.append( replacement ); } } return output; } // Function CalamaresUtils::obscure based on KStringHandler::obscure, // part of KDElibs by KDE, file kstringhandler.cpp. // Original copyright statement follows. /* This file is part of the KDE libraries Copyright (C) 1999 Ian Zepp (icszepp@islc.net) Copyright (C) 2006 by Dominic Battre Copyright (C) 2006 by Martin Pool This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ QString obscure( const QString& string ) { QString result; const QChar* unicode = string.unicode(); for ( int i = 0; i < string.length(); ++i ) // yes, no typo. can't encode ' ' or '!' because // they're the unicode BOM. stupid scrambling. stupid. { result += ( unicode[ i ].unicode() <= 0x21 ) ? unicode[ i ] : QChar( 0x1001F - unicode[ i ].unicode() ); } 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 ); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/String.h000066400000000000000000000063361410275732300216710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_STRING_H #define UTILS_STRING_H #include "DllMacro.h" #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. */ namespace CalamaresUtils { /** * @brief removeDiacritics replaces letters with diacritics and ligatures with * alternative forms and digraphs. * @param string the string to transform. * @return the output string with plain characters. */ DLLEXPORT QString removeDiacritics( const QString& string ); /** * @brief obscure is a bidirectional obfuscation function, from KStringHandler. * @param string the input 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 } ); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/TestPaths.cpp000066400000000000000000000165551410275732300227010ustar00rootroot00000000000000/* === 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 "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" #include "UMask.h" #include "Yaml.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include class TestPaths : public QObject { Q_OBJECT public: TestPaths() {} ~TestPaths() override {} private Q_SLOTS: void initTestCase(); void init(); void cleanupTestCase(); void testCreationResult(); void testTargetPath(); void testCreateTarget(); void testCreateTargetExists(); void testCreateTargetOverwrite(); void testCreateTargetBasedirs(); private: CalamaresUtils::System* m_system = nullptr; // Points to singleton instance, not owned Calamares::GlobalStorage* m_gs = nullptr; }; static const char testFile[] = "/calamares-testcreate"; static const char absFile[] = "/tmp/calamares-testcreate"; // With rootMountPoint prepended void TestPaths::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); // 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 ); m_system = system; m_gs = gs; } void TestPaths::cleanupTestCase() { QFile::remove( absFile ); } void TestPaths::init() { cDebug() << "Setting rootMountPoint"; m_gs->insert( "rootMountPoint", "/tmp" ); } void TestPaths::testCreationResult() { using Code = CalamaresUtils::CreationResult::Code; for ( auto c : { Code::OK, Code::AlreadyExists, Code::Failed, Code::Invalid } ) { auto r = CalamaresUtils::CreationResult( c ); QVERIFY( r.path().isEmpty() ); QCOMPARE( r.path(), QString() ); // Get a warning from Clang if we're not covering everything switch ( r.code() ) { case Code::OK: QVERIFY( !r.failed() ); QVERIFY( r ); break; case Code::AlreadyExists: QVERIFY( !r.failed() ); QVERIFY( !r ); break; case Code::Failed: case Code::Invalid: QVERIFY( r.failed() ); QVERIFY( !r ); break; } } QString path( "/etc/os-release" ); auto r = CalamaresUtils::CreationResult( path ); QVERIFY( !r.failed() ); QVERIFY( r ); QCOMPARE( r.code(), Code::OK ); QCOMPARE( r.path(), path ); } void TestPaths::testTargetPath() { // Paths mapped normally QCOMPARE( m_system->targetPath( "/etc/calamares" ), QStringLiteral( "/tmp/etc/calamares" ) ); QCOMPARE( m_system->targetPath( "//etc//calamares" ), QStringLiteral( "/tmp//etc//calamares" ) ); // extra / are not cleaned up QCOMPARE( m_system->targetPath( "etc/calamares" ), QStringLiteral( "/tmp/etc/calamares" ) ); // relative to root // Weird Paths QCOMPARE( m_system->targetPath( QString() ), QStringLiteral( "/tmp/" ) ); // Now break GS m_gs->remove( "rootMountPoint" ); QCOMPARE( m_system->targetPath( QString() ), QString() ); // Without root, no path } void TestPaths::testCreateTarget() { auto r = m_system->createTargetFile( testFile, "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); QCOMPARE( r.path(), QString( absFile ) ); // Success QFileInfo fi( absFile ); QVERIFY( fi.exists() ); QCOMPARE( fi.size(), 5 ); m_system->removeTargetFile( testFile ); QFileInfo fi2( absFile ); // fi caches information QVERIFY( !fi2.exists() ); } struct GSRollback { GSRollback( const QString& key ) : m_key( key ) , m_value( Calamares::JobQueue::instance()->globalStorage()->value( key ) ) { } ~GSRollback() { Calamares::JobQueue::instance()->globalStorage()->insert( m_key, m_value ); } QString m_key; QVariant m_value; }; void TestPaths::testCreateTargetExists() { static const char ltestFile[] = "cala-test-world"; GSRollback g( QStringLiteral( "rootMountPoint" ) ); QTemporaryDir d; d.setAutoRemove( true ); Calamares::JobQueue::instance()->globalStorage()->insert( QStringLiteral( "rootMountPoint" ), d.path() ); QVERIFY( QFileInfo( d.path() ).exists() ); auto r = m_system->createTargetFile( ltestFile, "Hello" ); QVERIFY( r ); QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); r = m_system->createTargetFile( ltestFile, "Goodbye" ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( !r ); // But not unqualified success, either QVERIFY( r.path().isEmpty() ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); // Unchanged! } void TestPaths::testCreateTargetOverwrite() { static const char ltestFile[] = "cala-test-world"; GSRollback g( QStringLiteral( "rootMountPoint" ) ); QTemporaryDir d; d.setAutoRemove( true ); Calamares::JobQueue::instance()->globalStorage()->insert( QStringLiteral( "rootMountPoint" ), d.path() ); QVERIFY( QFileInfo( d.path() ).exists() ); auto r = m_system->createTargetFile( ltestFile, "Hello" ); QVERIFY( r ); QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); r = m_system->createTargetFile( ltestFile, "Goodbye", CalamaresUtils::System::WriteMode::KeepExisting ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( !r ); // But not unqualified success, either QVERIFY( r.path().isEmpty() ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 5 ); // Unchanged! r = m_system->createTargetFile( ltestFile, "Goodbye", CalamaresUtils::System::WriteMode::Overwrite ); QVERIFY( !r.failed() ); // It didn't fail! QVERIFY( r ); // Total success QVERIFY( r.path().endsWith( QString( ltestFile ) ) ); QCOMPARE( QFileInfo( d.filePath( QString( ltestFile ) ) ).size(), 7 ); } struct DirRemover { DirRemover( const QString& base, const QString& dir ) : m_base( base ) , m_dir( dir ) { } ~DirRemover() { QDir( m_base ).rmpath( m_dir ); } bool exists() const { return QDir( m_base ).exists( m_dir ); } QString m_base, m_dir; }; void TestPaths::testCreateTargetBasedirs() { { DirRemover dirrm( "/tmp", "var/lib/dbus" ); QVERIFY( m_system->createTargetDirs( "/" ) ); QVERIFY( m_system->createTargetDirs( "/var/lib/dbus" ) ); QVERIFY( QFile( "/tmp/var/lib/dbus" ).exists() ); QVERIFY( dirrm.exists() ); } QVERIFY( !QFile( "/tmp/var/lib/dbus" ).exists() ); // QFileInfo.dir() behaves even when things don't exist QCOMPARE( QFileInfo( "/tmp/var/lib/dbus/bogus" ).dir().path(), QStringLiteral( "/tmp/var/lib/dbus" ) ); } QTEST_GUILESS_MAIN( TestPaths ) #include "utils/moc-warnings.h" #include "TestPaths.moc" calamares-3.2.41.1/src/libcalamares/utils/Tests.cpp000066400000000000000000000552241410275732300220600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * * Calamares is Free Software: see the License-Identifier above. * * */ #include "CalamaresUtilsSystem.h" #include "Entropy.h" #include "Logger.h" #include "RAII.h" #include "String.h" #include "Traits.h" #include "UMask.h" #include "Variant.h" #include "Yaml.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include #include #include #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(); /** @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 testBoolSetter(); 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(); private: void recursiveCompareMap( const QVariantMap& a, const QVariantMap& b, int depth ); }; LibCalamaresTests::LibCalamaresTests() {} LibCalamaresTests::~LibCalamaresTests() {} void LibCalamaresTests::initTestCase() { } void LibCalamaresTests::testDebugLevels() { Logger::setupLogLevel( Logger::LOG_DISABLE ); QCOMPARE( Logger::logLevel(), static_cast< unsigned int >( Logger::LOG_DISABLE ) ); for ( unsigned int level = 0; level <= Logger::LOGVERBOSE; ++level ) { Logger::setupLogLevel( level ); QCOMPARE( Logger::logLevel(), level ); QVERIFY( Logger::logLevelEnabled( level ) ); for ( unsigned int xlevel = 0; xlevel <= Logger::LOGVERBOSE; ++xlevel ) { QCOMPARE( Logger::logLevelEnabled( xlevel ), xlevel <= level ); } } } 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 ) { f.setFileName( QString( "../" ) + f.fileName() ); } cDebug() << QDir().absolutePath() << f.fileName() << f.exists(); 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 ); QCOMPARE( map, other_map ); QFile::remove( "out.yaml" ); QFile::remove( "out2.yaml" ); } static QStringList findConf( const QDir& d ) { QStringList mine; if ( d.exists() ) { QString path = d.absolutePath(); path.append( d.separator() ); for ( const auto& confname : d.entryList( { "*.conf" } ) ) mine.append( path + confname ); for ( const auto& subdirname : d.entryList( QDir::AllDirs | QDir::NoDotAndDotDot ) ) { QDir subdir( d ); subdir.cd( subdirname ); mine.append( findConf( subdir ) ); } } 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, &loaded_ok ); QVERIFY( loaded_ok ); QVERIFY( CalamaresUtils::saveYaml( "out.yaml", map ) ); 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" ); } void LibCalamaresTests::testCommands() { using CalamaresUtils::System; auto r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls", "/tmp" } ); QVERIFY( r.getExitCode() == 0 ); QTemporaryFile tf( "/tmp/calamares-test-XXXXXX" ); QVERIFY( tf.open() ); QVERIFY( !tf.fileName().isEmpty() ); QFileInfo tfn( tf.fileName() ); QVERIFY( !r.getOutput().contains( tfn.fileName() ) ); // Run ls again, now that the file exists r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls", "/tmp" } ); QVERIFY( r.getOutput().contains( tfn.fileName() ) ); // .. and without a working directory set, assume builddir != /tmp r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls" } ); QVERIFY( !r.getOutput().contains( tfn.fileName() ) ); r = System::runCommand( System::RunLocation::RunInHost, { "/bin/ls" }, "/tmp" ); QVERIFY( r.getOutput().contains( tfn.fileName() ) ); } void LibCalamaresTests::testUmask() { struct stat mystat; QTemporaryFile ft; QVERIFY( ft.open() ); // m gets the previous value of the mask (depends on the environment the // test is run in, might be 002, might be 077), .. mode_t m = CalamaresUtils::setUMask( 022 ); QCOMPARE( CalamaresUtils::setUMask( m ), mode_t( 022 ) ); // But now most recently set was 022 for ( mode_t i = 0; i <= 0777 /* octal! */; ++i ) { QByteArray name = ( ft.fileName() + QChar( '.' ) + QString::number( i, 8 ) ).toLatin1(); CalamaresUtils::UMask um( i ); int fd = creat( name, 0777 ); QVERIFY( fd >= 0 ); close( fd ); QFileInfo fi( name ); QVERIFY( fi.exists() ); QCOMPARE( stat( name, &mystat ), 0 ); QCOMPARE( mystat.st_mode & 0777, 0777 & ~i ); QCOMPARE( unlink( name ), 0 ); } QCOMPARE( CalamaresUtils::setUMask( 022 ), m ); QCOMPARE( CalamaresUtils::setUMask( m ), mode_t( 022 ) ); } void LibCalamaresTests::testEntropy() { QByteArray data; auto r0 = CalamaresUtils::getEntropy( 0, data ); QCOMPARE( CalamaresUtils::EntropySource::None, r0 ); QCOMPARE( data.size(), 0 ); auto r1 = CalamaresUtils::getEntropy( 16, data ); QVERIFY( r1 != CalamaresUtils::EntropySource::None ); QCOMPARE( data.size(), 16 ); // This can randomly fail (but not often) QVERIFY( data.at( data.size() - 1 ) != char( 0xcb ) ); auto r2 = CalamaresUtils::getEntropy( 8, data ); QVERIFY( r2 != CalamaresUtils::EntropySource::None ); QCOMPARE( data.size(), 8 ); QCOMPARE( r1, r2 ); // This can randomly fail (but not often) QVERIFY( data.at( data.size() - 1 ) != char( 0xcb ) ); } void LibCalamaresTests::testPrintableEntropy() { QString s; auto r0 = CalamaresUtils::getPrintableEntropy( 0, s ); QCOMPARE( CalamaresUtils::EntropySource::None, r0 ); QCOMPARE( s.length(), 0 ); auto r1 = CalamaresUtils::getPrintableEntropy( 16, s ); QVERIFY( r1 != CalamaresUtils::EntropySource::None ); QCOMPARE( s.length(), 16 ); for ( QChar c : s ) { QVERIFY( c.isPrint() ); QCOMPARE( c.row(), uchar( 0 ) ); QVERIFY( c.cell() > 32 ); // ASCII SPACE QVERIFY( c.cell() < 127 ); } } void LibCalamaresTests::testOddSizedPrintable() { QString s; for ( int l = 0; l <= 37; ++l ) { auto r = CalamaresUtils::getPrintableEntropy( l, s ); if ( l == 0 ) { QCOMPARE( r, CalamaresUtils::EntropySource::None ); } else { QVERIFY( r != CalamaresUtils::EntropySource::None ); } QCOMPARE( s.length(), l ); for ( QChar c : s ) { QVERIFY( c.isPrint() ); QCOMPARE( c.row(), uchar( 0 ) ); QVERIFY( c.cell() > 32 ); // ASCII SPACE QVERIFY( c.cell() < 127 ); } } } void LibCalamaresTests::testBoolSetter() { bool b = false; QVERIFY( !b ); { QVERIFY( !b ); cBoolSetter< true > x( b ); QVERIFY( b ); } QVERIFY( !b ); QVERIFY( !b ); { QVERIFY( !b ); cBoolSetter< false > x( b ); QVERIFY( !b ); // Still! } QVERIFY( b ); } void LibCalamaresTests::testPointerSetter() { int special = 17; QCOMPARE( special, 17 ); { cPointerSetter p( &special ); } QCOMPARE( special, 17 ); { cPointerSetter p( &special ); p = 18; } QCOMPARE( special, 18 ); { cPointerSetter p( &special ); p = 20; p = 3; } QCOMPARE( special, 3 ); { cPointerSetter p( nullptr ); } QCOMPARE( special, 3 ); { // "don't do this" .. order of destructors is important cPointerSetter p( &special ); cPointerSetter q( &special ); p = 17; } QCOMPARE( special, 17 ); { // "don't do this" .. order of destructors is important cPointerSetter p( &special ); cPointerSetter 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 ); } } QTEST_GUILESS_MAIN( LibCalamaresTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/libcalamares/utils/Traits.h000066400000000000000000000044701410275732300216660ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamares/utils/UMask.cpp000066400000000000000000000012351410275732300217670ustar00rootroot00000000000000/* === 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 "UMask.h" #include #include namespace CalamaresUtils { mode_t setUMask( mode_t u ) { return umask( u ); } UMask::UMask( mode_t u ) : m_mode( setUMask( u ) ) { } UMask::~UMask() { setUMask( m_mode ); } static_assert( UMask::Safe == ( S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH ), "Bad permissions." ); } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/UMask.h000066400000000000000000000021611410275732300214330ustar00rootroot00000000000000/* === 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 UTILS_UMASK_H #define UTILS_UMASK_H #include "DllMacro.h" #include namespace CalamaresUtils { /** @brief Wrapper for umask(2) * * Like umask(2), sets the umask and returns the previous value of the mask. */ DLLEXPORT mode_t setUMask( mode_t u ); /** @brief RAII for setting and re-setting umask. * * Create an object of this class to set the umask, * and the umask is reset to its original value when * the object goes out of scope. */ class DLLEXPORT UMask { public: UMask( mode_t u ); ~UMask(); /** @brief a "safe" umask * * This umask will switch off group- and other- permissions for * files, so that the file cannot be read, written, or executed * except by the owner. */ static constexpr mode_t Safe = 077; // octal! private: mode_t m_mode; }; } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Units.h000066400000000000000000000060511410275732300215170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * * * Calamares is Free Software: see the License-Identifier above. * * */ #ifndef UTILS_UNITS_H #define UTILS_UNITS_H #include namespace CalamaresUtils { namespace Units { /** User defined literals, 1_KB is 1 KiloByte (= 10^3 bytes) */ constexpr qint64 operator""_KB( unsigned long long m ) { return qint64( m ) * 1000; } /** User defined literals, 1_KiB is 1 KibiByte (= 2^10 bytes) */ constexpr qint64 operator""_KiB( unsigned long long m ) { return qint64( m ) * 1024; } /** User defined literals, 1_MB is 1 MegaByte (= 10^6 bytes) */ constexpr qint64 operator""_MB( unsigned long long m ) { return operator""_KB(m)*1000; } /** User defined literals, 1_MiB is 1 MibiByte (= 2^20 bytes) */ constexpr qint64 operator""_MiB( unsigned long long m ) { return operator""_KiB(m)*1024; } /** User defined literals, 1_GB is 1 GigaByte (= 10^9 bytes) */ constexpr qint64 operator""_GB( unsigned long long m ) { return operator""_MB(m)*1000; } /** User defined literals, 1_GiB is 1 GibiByte (= 2^30 bytes) */ constexpr qint64 operator""_GiB( unsigned long long m ) { return operator""_MiB(m)*1024; } } // namespace Units constexpr qint64 KBtoBytes( unsigned long long m ) { return Units::operator""_KB( m ); } constexpr qint64 KiBtoBytes( unsigned long long m ) { return Units::operator""_KiB( m ); } constexpr qint64 MBtoBytes( unsigned long long m ) { return Units::operator""_MB( m ); } constexpr qint64 MiBtoBytes( unsigned long long m ) { return Units::operator""_MiB( m ); } constexpr qint64 GBtoBytes( unsigned long long m ) { return Units::operator""_GB( m ); } constexpr qint64 GiBtoBytes( unsigned long long m ) { return Units::operator""_GiB( m ); } constexpr qint64 KBtoBytes( double m ) { return qint64( m * 1000 ); } constexpr qint64 KiBtoBytes( double m ) { return qint64( m * 1024 ); } constexpr qint64 MBtoBytes( double m ) { return qint64( m * 1000 * 1000 ); } constexpr qint64 MiBtoBytes( double m ) { return qint64( m * 1024 * 1024 ); } constexpr qint64 GBtoBytes( double m ) { return qint64( m * 1000 * 1000 * 1000 ); } constexpr qint64 GiBtoBytes( double m ) { return qint64( m * 1024 * 1024 * 1024 ); } constexpr int BytesToMiB( qint64 b ) { return int( b / 1024 / 1024 ); } constexpr int BytesToGiB( qint64 b ) { return int( b / 1024 / 1024 / 1024 ); } constexpr qint64 alignBytesToBlockSize( qint64 bytes, qint64 blocksize ) { qint64 blocks = bytes / blocksize; if ( blocks * blocksize != bytes ) { ++blocks; } return blocks * blocksize; } constexpr qint64 bytesToSectors( qint64 bytes, qint64 blocksize ) { return alignBytesToBlockSize( alignBytesToBlockSize( bytes, blocksize ), MiBtoBytes( 1ULL ) ) / blocksize; } } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Variant.cpp000066400000000000000000000053111410275732300223520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Originally from Tomahawk, portions: * SPDX-FileCopyrightText: 2010-2011 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2010-2011 Leo Franchi * SPDX-FileCopyrightText: 2010-2012 Jeff Mitchell * * Calamares is Free Software: see the License-Identifier above. * * */ #include "Variant.h" #include "Logger.h" #include #include namespace CalamaresUtils { bool getBool( const QVariantMap& map, const QString& key, bool d ) { if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Bool ) { return v.toBool(); } } return d; } QString getString( const QVariantMap& map, const QString& key, const QString& d ) { if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::String ) { return v.toString(); } } 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; } qint64 getInteger( const QVariantMap& map, const QString& key, qint64 d ) { if ( map.contains( key ) ) { auto v = map.value( key ); return v.toString().toLongLong( nullptr, 0 ); } return d; } 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 ) { if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Int ) { return v.toInt(); } else if ( v.type() == QVariant::Double ) { return v.toDouble(); } } return d; } QVariantMap getSubMap( const QVariantMap& map, const QString& key, bool& success, const QVariantMap& d ) { success = false; if ( map.contains( key ) ) { auto v = map.value( key ); if ( v.type() == QVariant::Map ) { success = true; return v.toMap(); } } return d; } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/Variant.h000066400000000000000000000046421410275732300220250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2013-2016 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 UTILS_VARIANT_H #define UTILS_VARIANT_H #include "DllMacro.h" #include #include namespace CalamaresUtils { /** * 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 = 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 that 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 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 = 0 ); /** * Get an unsigned integer value from a mapping with a given key; returns @p d if no value. */ DLLEXPORT quint64 getUnsignedInteger( const QVariantMap& map, const QString& key, quint64 d = 0 ); /** * 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 @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, const QVariantMap& d = QVariantMap() ); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/Yaml.cpp000066400000000000000000000200671410275732300216550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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. * * * */ #include "Yaml.h" #include "utils/Logger.h" #include #include #include #include void operator>>( const YAML::Node& node, QStringList& v ) { for ( size_t i = 0; i < node.size(); ++i ) { v.append( QString::fromStdString( node[ i ].as< std::string >() ) ); } } namespace CalamaresUtils { const QRegExp _yamlScalarTrueValues = QRegExp( "true|True|TRUE|on|On|ON" ); const QRegExp _yamlScalarFalseValues = QRegExp( "false|False|FALSE|off|Off|OFF" ); QVariant yamlToVariant( const YAML::Node& node ) { switch ( node.Type() ) { case YAML::NodeType::Scalar: return yamlScalarToVariant( node ); case YAML::NodeType::Sequence: return yamlSequenceToVariant( node ); case YAML::NodeType::Map: return yamlMapToVariant( node ); case YAML::NodeType::Null: case YAML::NodeType::Undefined: return QVariant(); } __builtin_unreachable(); } QVariant yamlScalarToVariant( const YAML::Node& scalarNode ) { std::string stdScalar = scalarNode.as< std::string >(); QString scalarString = QString::fromStdString( stdScalar ); if ( _yamlScalarTrueValues.exactMatch( scalarString ) ) { return QVariant( true ); } if ( _yamlScalarFalseValues.exactMatch( scalarString ) ) { return QVariant( false ); } if ( QRegExp( "[-+]?\\d+" ).exactMatch( scalarString ) ) { return QVariant( scalarString.toLongLong() ); } if ( QRegExp( "[-+]?\\d*\\.?\\d+" ).exactMatch( scalarString ) ) { return QVariant( scalarString.toDouble() ); } return QVariant( scalarString ); } QVariantList yamlSequenceToVariant( const YAML::Node& sequenceNode ) { QVariantList vl; for ( YAML::const_iterator it = sequenceNode.begin(); it != sequenceNode.end(); ++it ) { vl << yamlToVariant( *it ); } return vl; } QVariantMap yamlMapToVariant( const YAML::Node& mapNode ) { QVariantMap vm; for ( YAML::const_iterator it = mapNode.begin(); it != mapNode.end(); ++it ) { vm.insert( QString::fromStdString( it->first.as< std::string >() ), yamlToVariant( it->second ) ); } return vm; } QStringList yamlToStringList( const YAML::Node& listNode ) { QStringList l; listNode >> l; return l; } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData, const char* label ) { cWarning() << "YAML error " << e.what() << "in" << label << '.'; explainYamlException( e, yamlData ); } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData, const QString& label ) { cWarning() << "YAML error " << e.what() << "in" << label << '.'; explainYamlException( e, yamlData ); } void explainYamlException( const YAML::Exception& e, const QByteArray& yamlData ) { if ( ( e.mark.line >= 0 ) && ( e.mark.column >= 0 ) ) { // Try to show the line where it happened. int linestart = 0; for ( int linecount = 0; linecount < e.mark.line; ++linecount ) { linestart = yamlData.indexOf( '\n', linestart ); // No more \ns found, weird if ( linestart < 0 ) { break; } linestart += 1; // Skip that \n } int lineend = linestart; if ( linestart >= 0 ) { lineend = yamlData.indexOf( '\n', linestart ); if ( lineend < 0 ) { lineend = yamlData.length(); } } int rangestart = linestart; int rangeend = lineend; // Adjust range (linestart..lineend) so it's not too long if ( ( linestart >= 0 ) && ( e.mark.column > 30 ) ) { rangestart += ( e.mark.column - 30 ); } if ( ( linestart >= 0 ) && ( rangeend - rangestart > 40 ) ) { rangeend = rangestart + 40; } if ( linestart >= 0 ) { cWarning() << "offending YAML data:" << yamlData.mid( rangestart, rangeend - rangestart ).constData(); } } } QVariantMap loadYaml( const QFileInfo& fi, bool* ok ) { return loadYaml( fi.absoluteFilePath(), ok ); } QVariantMap loadYaml( const QString& filename, bool* ok ) { if ( ok ) { *ok = false; } QFile yamlFile( filename ); QVariant yamlContents; if ( yamlFile.exists() && yamlFile.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = yamlFile.readAll(); try { YAML::Node doc = YAML::Load( ba.constData() ); yamlContents = CalamaresUtils::yamlToVariant( doc ); } catch ( YAML::Exception& e ) { explainYamlException( e, ba, filename ); return QVariantMap(); } } if ( yamlContents.isValid() && !yamlContents.isNull() && yamlContents.type() == QVariant::Map ) { if ( ok ) { *ok = true; } return yamlContents.toMap(); } return QVariantMap(); } /// @brief Convenience function writes @p indent times four spaces static void writeIndent( QFile& f, int indent ) { while ( indent-- > 0 ) { f.write( " " ); } } // forward declaration static bool dumpYaml( QFile& f, const QVariantMap& map, int indent ); // It's a quote static const char quote[] = "\""; static const char newline[] = "\n"; /// @brief Recursive helper to dump a single value static void dumpYamlElement( QFile& f, const QVariant& value, int indent ) { if ( value.type() == QVariant::Type::Bool ) { f.write( value.toBool() ? "true" : "false" ); } else if ( value.type() == QVariant::Type::String ) { f.write( quote ); f.write( value.toString().toUtf8() ); f.write( quote ); } else if ( value.type() == QVariant::Type::Int ) { 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(), '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 ) { int c = 0; for ( const auto& it : value.toList() ) { ++c; f.write( newline ); writeIndent( f, indent + 1 ); f.write( "- " ); dumpYamlElement( f, it, indent + 1 ); } if ( !c ) // i.e. list was empty { f.write( "[]" ); } } else if ( value.type() == QVariant::Type::Map ) { f.write( newline ); dumpYaml( f, value.toMap(), indent + 1 ); } else { f.write( "<" ); f.write( value.typeName() ); f.write( ">" ); } } /// @brief Recursive helper to dump @p map to file static bool dumpYaml( QFile& f, const QVariantMap& map, int indent ) { for ( auto it = map.cbegin(); it != map.cend(); ++it ) { writeIndent( f, indent ); f.write( quote ); f.write( it.key().toUtf8() ); f.write( quote ); f.write( ": " ); dumpYamlElement( f, it.value(), indent ); f.write( newline ); } return true; } bool saveYaml( const QString& filename, const QVariantMap& map ) { QFile f( filename ); if ( !f.open( QFile::WriteOnly ) ) { return false; } f.write( "# YAML dump\n---\n" ); return dumpYaml( f, map, 0 ); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamares/utils/Yaml.h000066400000000000000000000055121410275732300213200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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. * * * */ /* * 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 #include #include #include #include class QByteArray; class QFileInfo; // The yaml-cpp headers are not C++11 warning-proof, especially // with picky compilers like Clang 8. Since we use Clang for the // find-all-the-warnings case, switch those warnings off for // the we-can't-change-them system headers. #ifdef __clang__ #pragma clang diagnostic push #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 #ifdef __clang__ #pragma clang diagnostic pop #endif /// @brief Appends all the elements of @p node to the string list @p v void operator>>( const YAML::Node& node, QStringList& v ); namespace CalamaresUtils { /** * Loads a given @p filename and returns the YAML data * as a QVariantMap. If filename doesn't exist, or is * malformed in some way, returns an empty map and sets * @p *ok to false. Otherwise sets @p *ok to true. */ QVariantMap loadYaml( const QString& filename, bool* ok = nullptr ); /** Convenience overload. */ QVariantMap loadYaml( const QFileInfo&, bool* ok = nullptr ); QVariant yamlToVariant( const YAML::Node& node ); QVariant yamlScalarToVariant( const YAML::Node& scalarNode ); QVariantList yamlSequenceToVariant( const YAML::Node& sequenceNode ); QVariantMap yamlMapToVariant( const YAML::Node& mapNode ); /// @brief Returns all the elements of @p listNode in a StringList QStringList yamlToStringList( const YAML::Node& listNode ); /// @brief Save a @p map to @p filename as YAML bool saveYaml( const QString& filename, const QVariantMap& map ); /** * Given an exception from the YAML parser library, explain * what is going on in terms of the data passed to the parser. * Uses @p label when labeling the data source (e.g. "netinstall data") */ void explainYamlException( const YAML::Exception& e, const QByteArray& data, const char* label ); void explainYamlException( const YAML::Exception& e, const QByteArray& data, const QString& label ); void explainYamlException( const YAML::Exception& e, const QByteArray& data ); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamares/utils/moc-warnings.h000066400000000000000000000017021410275732300230170ustar00rootroot00000000000000/* === 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" #endif calamares-3.2.41.1/src/libcalamaresui/000077500000000000000000000000001410275732300174405ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamaresui/Branding.cpp000066400000000000000000000455631410275732300217050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "Branding.h" #include "GlobalStorage.h" #include "utils/CalamaresUtilsGui.h" #include "utils/ImageRegistry.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Units.h" #include "utils/Yaml.h" #include #include #include #include #include #include #ifdef WITH_KOSRelease #include #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 { Branding* Branding::s_instance = nullptr; Branding* Branding::instance() { return s_instance; } // *INDENT-OFF* // clang-format off const QStringList Branding::s_stringEntryStrings = { "productName", "version", "shortVersion", "versionedName", "shortVersionedName", "shortProductName", "bootloaderEntryName", "productUrl", "supportUrl", "knownIssuesUrl", "releaseNotesUrl", "donateUrl" }; const QStringList Branding::s_imageEntryStrings = { "productBanner", "productIcon", "productLogo", "productWallpaper", "productWelcome" }; const QStringList Branding::s_styleEntryStrings = { "sidebarBackground", "sidebarText", "sidebarTextSelect", "sidebarTextHighlight" }; const QStringList Branding::s_uploadServerStrings = { "type", "url", "port" }; // clang-format on // *INDENT-ON* const NamedEnumTable< Branding::WindowDimensionUnit >& Branding::WindowDimension::suffixes() { using Unit = Branding::WindowDimensionUnit; // *INDENT-OFF* // clang-format off static const NamedEnumTable names{ {"px", Unit::Pixies}, {"em", Unit::Fonties} }; // clang-format on // *INDENT-ON* return names; } /** @brief Load the @p map with strings from @p doc * * Each key-value pair from the sub-map in @p doc identified by @p key * is inserted into the @p map, but the value is first transformed by * the @p transform function, which may change strings. */ static void loadStrings( QMap< QString, QString >& map, const YAML::Node& doc, const std::string& key, const std::function< QString( const QString& ) >& transform ) { if ( !doc[ key ].IsMap() ) { throw YAML::Exception( YAML::Mark(), std::string( "Branding configuration is not a map: " ) + key ); } 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 * special substitutions can be done as well. See the branding * documentation for details. */ Branding::Branding( const QString& brandingFilePath, QObject* parent ) : QObject( parent ) , m_descriptorPath( brandingFilePath ) , m_slideshowAPI( 1 ) , m_welcomeStyleCalamares( false ) , m_welcomeExpandingLogo( true ) { cDebug() << "Using Calamares branding file at" << brandingFilePath; QDir componentDir( componentDirectory() ); if ( !componentDir.exists() ) { bail( m_descriptorPath, "Bad component directory path." ); } QFile file( brandingFilePath ); if ( file.exists() && file.open( QFile::ReadOnly | QFile::Text ) ) { QByteArray ba = file.readAll(); try { YAML::Node doc = YAML::Load( ba.constData() ); Q_ASSERT( doc.IsMap() ); m_componentName = QString::fromStdString( doc[ "componentName" ].as< std::string >() ); if ( m_componentName != componentDir.dirName() ) 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. KOSRelease relInfo; QHash< QString, QString > relMap { std::initializer_list< std::pair< QString, QString > > { { QStringLiteral( "NAME" ), relInfo.name() }, { QStringLiteral( "VERSION" ), relInfo.version() }, { QStringLiteral( "ID" ), relInfo.id() }, { QStringLiteral( "ID_LIKE" ), relInfo.idLike().join( ' ' ) }, { QStringLiteral( "VERSION_CODENAME" ), relInfo.versionCodename() }, { QStringLiteral( "VERSION_ID" ), relInfo.versionId() }, { QStringLiteral( "PRETTY_NAME" ), relInfo.prettyName() }, { QStringLiteral( "HOME_URL" ), relInfo.homeUrl() }, { QStringLiteral( "DOCUMENTATION_URL" ), relInfo.documentationUrl() }, { QStringLiteral( "SUPPORT_URL" ), relInfo.supportUrl() }, { QStringLiteral( "BUG_REPORT_URL" ), relInfo.bugReportUrl() }, { QStringLiteral( "PRIVACY_POLICY_URL" ), relInfo.privacyPolicyUrl() }, { QStringLiteral( "BUILD_ID" ), relInfo.buildId() }, { 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( '@' ) ); }; #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( 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; } ); m_uploadServer = uploadServerFromMap( CalamaresUtils::yamlMapToVariant( doc[ "uploadServer" ] ) ); } catch ( YAML::Exception& e ) { CalamaresUtils::explainYamlException( e, ba, file.fileName() ); bail( m_descriptorPath, e.what() ); } QDir translationsDir( componentDir.filePath( "lang" ) ); if ( !translationsDir.exists() ) { cWarning() << "the branding component" << componentDir.absolutePath() << "does not ship translations."; } m_translationsPathPrefix = translationsDir.absolutePath(); m_translationsPathPrefix.append( QString( "%1calamares-%2" ).arg( QDir::separator() ).arg( m_componentName ) ); } else { cWarning() << "Cannot read branding file" << file.fileName(); } s_instance = this; if ( m_componentName.isEmpty() ) { cWarning() << "Failed to load component from" << brandingFilePath; } else { cDebug() << "Loaded branding component" << m_componentName; } } QString Branding::componentDirectory() const { QFileInfo fi( m_descriptorPath ); return fi.absoluteDir().absolutePath(); } QString Branding::string( Branding::StringEntry stringEntry ) const { return m_strings.value( s_stringEntryStrings.value( stringEntry ) ); } QString Branding::styleString( Branding::StyleEntry styleEntry ) const { return m_style.value( s_styleEntryStrings.value( styleEntry ) ); } QString Branding::imagePath( Branding::ImageEntry imageEntry ) const { return m_images.value( s_imageEntryStrings.value( imageEntry ) ); } QPixmap Branding::image( Branding::ImageEntry imageEntry, const QSize& size ) const { const auto path = imagePath( imageEntry ); if ( path.contains( '/' ) ) { QPixmap pixmap = ImageRegistry::instance()->pixmap( path, size ); Q_ASSERT( !pixmap.isNull() ); return pixmap; } else { auto icon = QIcon::fromTheme( path ); Q_ASSERT( !icon.isNull() ); return icon.pixmap( size ); } } QPixmap Branding::image( const QString& imageName, const QSize& size ) const { QDir componentDir( componentDirectory() ); 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() ) { return QPixmap(); } return icon.pixmap( size ); } return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); } static QString _stylesheet( const QDir& dir ) { QFileInfo importQSSPath( dir.filePath( "stylesheet.qss" ) ); if ( importQSSPath.exists() && importQSSPath.isReadable() ) { QFile stylesheetFile( importQSSPath.filePath() ); stylesheetFile.open( QFile::ReadOnly ); return stylesheetFile.readAll(); } else { 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 { QVariantMap brandingMap; for ( const QString& key : s_stringEntryStrings ) { brandingMap.insert( key, m_strings.value( key ) ); } globalStorage->insert( "branding", brandingMap ); } bool Branding::WindowDimension::isValid() const { return ( unit() != none ) && ( value() > 0 ); } /// @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 ) { if ( doc[ key ] ) { return QString::fromStdString( doc[ key ].as< std::string >() ); } 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 ) { using PanelFlavor = Branding::PanelFlavor; using PanelSide = Branding::PanelSide; // *INDENT-OFF* // clang-format off static const NamedEnumTable< PanelFlavor > sidebarFlavorNames { { QStringLiteral( "widget" ), PanelFlavor::Widget }, { QStringLiteral( "none" ), PanelFlavor::None }, { QStringLiteral( "hidden" ), PanelFlavor::None } #ifdef WITH_QML , { QStringLiteral( "qml" ), PanelFlavor::Qml } #endif }; static const NamedEnumTable< PanelSide > panelSideNames { { QStringLiteral( "left" ), PanelSide::Left }, { QStringLiteral( "right" ), PanelSide::Right }, { QStringLiteral( "top" ), PanelSide::Top }, { QStringLiteral( "bottom" ), PanelSide::Bottom } }; // clang-format on // *INDENT-ON* bool ok = false; QString configValue = getString( doc, key ); if ( configValue.isEmpty() ) { // Complain with the original values cWarning() << "Branding setting for" << key << "is missing, using" << sidebarFlavorNames.find( flavor, ok ) << panelSideNames.find( side, ok ); return; } QStringList parts = configValue.split( ',' ); if ( parts.length() == 1 ) { PanelFlavor f = sidebarFlavorNames.find( configValue, ok ); if ( ok ) { flavor = f; } else { // Complain with the original value cWarning() << "Branding setting for" << key << "interpreted as" << sidebarFlavorNames.find( flavor, ok ) << panelSideNames.find( side, ok ); } return; } for ( const QString& spart : parts ) { bool isFlavor = false; bool isSide = false; PanelFlavor f = sidebarFlavorNames.find( spart, isFlavor ); PanelSide s = panelSideNames.find( spart, isSide ); if ( isFlavor ) { flavor = f; } else if ( isSide ) { side = s; } else { cWarning() << "Branding setting for" << key << "contains unknown" << spart << "interpreted as" << sidebarFlavorNames.find( flavor, ok ) << panelSideNames.find( side, ok ); return; } } } void Branding::initSimpleSettings( const YAML::Node& doc ) { // *INDENT-OFF* // clang-format off static const NamedEnumTable< WindowExpansion > expansionNames { { QStringLiteral( "normal" ), WindowExpansion::Normal }, { QStringLiteral( "fullscreen" ), WindowExpansion::Fullscreen }, { QStringLiteral( "noexpand" ), WindowExpansion::Fixed } }; static const NamedEnumTable< WindowPlacement > placementNames { { QStringLiteral( "free" ), WindowPlacement::Free }, { QStringLiteral( "center" ), WindowPlacement::Center } }; // clang-format on // *INDENT-ON* bool ok = false; m_welcomeStyleCalamares = doc[ "welcomeStyleCalamares" ].as< bool >( false ); m_welcomeExpandingLogo = doc[ "welcomeExpandingLogo" ].as< bool >( true ); m_windowExpansion = expansionNames.find( getString( doc, "windowExpanding" ), ok ); if ( !ok ) { cWarning() << "Branding module-setting *windowExpanding* interpreted as" << expansionNames.find( m_windowExpansion, ok ); } m_windowPlacement = placementNames.find( getString( doc, "windowPlacement" ), ok ); if ( !ok ) { cWarning() << "Branding module-setting *windowPlacement* interpreted as" << placementNames.find( m_windowPlacement, ok ); } flavorAndSide( doc, "sidebar", m_sidebarFlavor, m_sidebarSide ); flavorAndSide( doc, "navigation", m_navigationFlavor, m_navigationSide ); QString windowSize = getString( doc, "windowSize" ); if ( !windowSize.isEmpty() ) { auto l = windowSize.split( ',' ); if ( l.count() == 2 ) { m_windowWidth = WindowDimension( l[ 0 ] ); m_windowHeight = WindowDimension( l[ 1 ] ); } } if ( !m_windowWidth.isValid() ) { m_windowWidth = WindowDimension( CalamaresUtils::windowPreferredWidth, WindowDimensionUnit::Pixies ); } if ( !m_windowHeight.isValid() ) { m_windowHeight = WindowDimension( CalamaresUtils::windowPreferredHeight, WindowDimensionUnit::Pixies ); } } void Branding::initSlideshowSettings( const YAML::Node& doc ) { 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 calamares-3.2.41.1/src/libcalamaresui/Branding.h000066400000000000000000000230201410275732300213320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef BRANDING_H #define BRANDING_H #include "CalamaresConfig.h" #include "DllMacro.h" #include "utils/NamedSuffix.h" #include #include #include #include #include #include namespace YAML { class Node; } namespace Calamares { class GlobalStorage; class UIDLLEXPORT Branding : public QObject { Q_OBJECT public: /** * Descriptive strings in the configuration file. use * e.g. *Branding::ProductName to get the string value for * the product name. */ enum StringEntry { ProductName, Version, ShortVersion, VersionedName, ShortVersionedName, ShortProductName, BootloaderEntryName, ProductUrl, SupportUrl, KnownIssuesUrl, ReleaseNotesUrl, DonateUrl }; Q_ENUM( StringEntry ) enum ImageEntry : short { ProductBanner, ProductIcon, ProductLogo, ProductWallpaper, ProductWelcome }; Q_ENUM( ImageEntry ) enum StyleEntry : short { SidebarBackground, SidebarText, SidebarTextSelect, 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 { Normal, Fullscreen, Fixed }; Q_ENUM( WindowExpansion ) /** @brief Setting for the main window size. * * The units are pixels (Pixies) or something-based-on-fontsize (Fonties), which * we suffix as "em", e.g. "600px" or "32em". */ enum class WindowDimensionUnit { None, Pixies, Fonties }; Q_ENUM( WindowDimensionUnit ) class WindowDimension : public NamedSuffix< WindowDimensionUnit, WindowDimensionUnit::None > { public: static const NamedEnumTable< WindowDimensionUnit >& suffixes(); bool isValid() const; using NamedSuffix::NamedSuffix; WindowDimension( const QString& s ) : NamedSuffix( suffixes(), s ) { } }; /** @brief Placement of main window. */ enum class WindowPlacement { Center, Free }; Q_ENUM( WindowPlacement ) ///@brief What kind of panel (sidebar, navigation) to use in the main window enum class PanelFlavor { None, Widget #ifdef WITH_QML , Qml #endif }; Q_ENUM( PanelFlavor ) ///@brief Where to place a panel (sidebar, navigation) enum class PanelSide { None, Left, Right, Top, Bottom }; Q_ENUM( PanelSide ) static Branding* instance(); explicit Branding( const QString& brandingFilePath, QObject* parent = nullptr ); /** @brief Complete path of the branding descriptor file. */ QString descriptorPath() const { return m_descriptorPath; } /** @brief The component name found in the descriptor file. * * The component name always matches the last directory name in the path. */ QString componentName() const { return m_componentName; } /** @brief The directory holding all of the branding assets. */ QString componentDirectory() const; /** @brief The directory where branding translations live. * * This is componentDir + "/lang". */ QString translationsDirectory() const { return m_translationsPathPrefix; } /** @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; /** @brief Look up an image in the branding directory or as an icon * * The @p name is checked in the branding directory: if it is an image * file, return the pixmap from that file, at the requested size. * If it isn't a file, look it up as an icon name in the current theme. * May return a null pixmap if nothing is found. */ QPixmap image( const QString& name, 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 * it may be quite expensive -- although normally it will be * called only once, on startup. (Or from the debug window) */ QString stylesheet() const; bool welcomeStyleCalamares() const { return m_welcomeStyleCalamares; } bool welcomeExpandingLogo() const { return m_welcomeExpandingLogo; } bool windowMaximize() const { return m_windowExpansion == WindowExpansion::Fullscreen; } bool windowExpands() const { return m_windowExpansion != WindowExpansion::Fixed; } QPair< WindowDimension, WindowDimension > windowSize() const { return QPair< WindowDimension, WindowDimension >( m_windowWidth, m_windowHeight ); } bool windowPlacementCentered() const { return m_windowPlacement == WindowPlacement::Center; } ///@brief Which sidebar flavor is configured PanelFlavor sidebarFlavor() const { return m_sidebarFlavor; } ///@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). */ using UploadServerInfo = std::tuple< UploadServerType, QUrl, qint64 >; 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 * information accessible to the Python modules. */ void setGlobals( GlobalStorage* globalStorage ) const; 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; PanelSide sidebarSide() const { return m_sidebarSide; } PanelSide navigationSide() const { return m_navigationSide; } private: static Branding* s_instance; static const QStringList s_stringEntryStrings; static const QStringList s_imageEntryStrings; static const QStringList s_styleEntryStrings; 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; WindowExpansion m_windowExpansion; WindowDimension m_windowHeight, m_windowWidth; WindowPlacement m_windowPlacement; PanelFlavor m_sidebarFlavor = PanelFlavor::Widget; PanelFlavor m_navigationFlavor = PanelFlavor::Widget; PanelSide m_sidebarSide = PanelSide::Left; PanelSide m_navigationSide = PanelSide::Bottom; }; } // namespace Calamares #endif // BRANDING_H calamares-3.2.41.1/src/libcalamaresui/CMakeLists.txt000066400000000000000000000066721410275732300222130ustar00rootroot00000000000000# === 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. # The UI libs use the non-UI library include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_BINARY_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR} ) set( calamaresui_SOURCES modulesystem/CppJobModule.cpp modulesystem/ModuleFactory.cpp modulesystem/ModuleManager.cpp modulesystem/ProcessJobModule.cpp modulesystem/ViewModule.cpp utils/CalamaresUtilsGui.cpp utils/ImageRegistry.cpp utils/Paste.cpp viewpages/BlankViewStep.cpp viewpages/ExecutionViewStep.cpp viewpages/Slideshow.cpp viewpages/ViewStep.cpp widgets/ClickableLabel.cpp widgets/FixedAspectRatioLabel.cpp widgets/PrettyRadioButton.cpp widgets/WaitingWidget.cpp ${CMAKE_SOURCE_DIR}/3rdparty/waitingspinnerwidget.cpp Branding.cpp ViewManager.cpp ) # 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 ) if( WITH_PYTHON ) list( APPEND calamaresui_SOURCES modulesystem/PythonJobModule.cpp ) endif() if( WITH_PYTHONQT ) list( APPEND calamaresui_SOURCES modulesystem/PythonQtViewModule.cpp utils/PythonQtUtils.cpp viewpages/PythonQtJob.cpp viewpages/PythonQtViewStep.cpp viewpages/PythonQtGlobalStorageWrapper.cpp viewpages/PythonQtUtilsWrapper.cpp ) 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_LIBRARIES Qt5::Svg RESOURCES libcalamaresui.qrc EXPORT Calamares VERSION ${CALAMARES_VERSION_SHORT} ) 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 ) calamares-3.2.41.1/src/libcalamaresui/ViewManager.cpp000066400000000000000000000445711410275732300223640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ViewManager.h" #include "Branding.h" #include "JobQueue.h" #include "Settings.h" #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 #include #include #include #include #include #define UPDATE_BUTTON_PROPERTY( name, value ) \ do \ { \ m_##name = value; \ emit name##Changed( m_##name ); \ } while ( false ) namespace Calamares { ViewManager* ViewManager::s_instance = nullptr; ViewManager* ViewManager::instance() { return s_instance; } ViewManager* ViewManager::instance( QObject* parent ) { Q_ASSERT( !s_instance ); s_instance = new ViewManager( parent ); return s_instance; } 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 ); updateButtonLabels(); connect( JobQueue::instance(), &JobQueue::failed, this, &ViewManager::onInstallationFailed ); connect( JobQueue::instance(), &JobQueue::finished, this, &ViewManager::next ); CALAMARES_RETRANSLATE_SLOT( &ViewManager::updateButtonLabels ); } ViewManager::~ViewManager() { m_widget->deleteLater(); s_instance = nullptr; } QWidget* ViewManager::centralWidget() { return m_widget; } void ViewManager::addViewStep( ViewStep* step ) { insertViewStep( m_steps.size(), step ); // If this is the first inserted view step, update status of "Next" button if ( m_steps.count() == 1 ) { m_nextEnabled = step->isNextEnabled(); emit nextEnabledChanged( m_nextEnabled ); } } void ViewManager::insertViewStep( int before, ViewStep* step ) { emit beginInsertRows( QModelIndex(), before, before ); m_steps.insert( before, step ); connect( step, &ViewStep::ensureSize, this, &ViewManager::ensureSize ); connect( step, &ViewStep::nextStatusChanged, this, &ViewManager::updateNextStatus ); if ( !step->widget() ) { cError() << "ViewStep" << step->moduleInstanceKey() << "has no widget."; } else { 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(); } emit endInsertRows(); } void ViewManager::onInstallationFailed( const QString& message, const QString& details ) { bool shouldOfferWebPaste = std::get< 0 >( Calamares::Branding::instance()->uploadServer() ) != Calamares::Branding::UploadServerType::None and std::get< 2 >( Calamares::Branding::instance()->uploadServer() ) != 0; 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 += "

" + CalamaresUtils::truncateMultiLine( details, CalamaresUtils::LinesStartEnd { 6, 2 } ) .replace( '\n', QStringLiteral( "
" ) ) + "

"; } 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(); cDebug() << "Calamares will quit when the dialog closes."; connect( msgBox, &QMessageBox::buttonClicked, [msgBox]( QAbstractButton* button ) { if ( msgBox->buttonRole( button ) == QMessageBox::ButtonRole::YesRole ) { CalamaresUtils::Paste::doLogUploadUI( msgBox ); } QApplication::quit(); } ); } void ViewManager::onInitFailed( const QStringList& modules ) { // Because this means the installer / setup program is broken by the distributor, // don't bother being precise about installer / setup wording. QString title( tr( "Calamares Initialization Failed" ) ); QString description( tr( "%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." ) ); QString detailString; if ( modules.count() > 0 ) { description.append( tr( "
The following modules could not be loaded:" ) ); QStringList details; details << QLatin1String( "
    " ); for ( const auto& m : modules ) { details << QLatin1String( "
  • " ) << m << QLatin1String( "
  • " ); } details << QLatin1String( "
" ); detailString = details.join( QString() ); } insertViewStep( 0, new BlankViewStep( title, description.arg( Calamares::Branding::instance()->productName() ), detailString ) ); } void ViewManager::onInitComplete() { m_currentStep = 0; // Tell the first view that it's been shown. if ( m_steps.count() > 0 ) { m_steps.first()->onActivate(); } emit currentStepChanged(); } void ViewManager::updateNextStatus( bool status ) { ViewStep* vs = qobject_cast< ViewStep* >( sender() ); if ( vs && currentStepValid() ) { if ( vs == m_steps.at( m_currentStep ) ) { m_nextEnabled = status; emit nextEnabledChanged( m_nextEnabled ); } } } ViewStepList ViewManager::viewSteps() const { return m_steps; } ViewStep* ViewManager::currentStep() const { return currentStepValid() ? m_steps.value( m_currentStep ) : nullptr; } int ViewManager::currentStepIndex() const { return m_currentStep; } /** @brief Is the given step at @p index an execution step? * * Returns true if the step is an execution step, false otherwise. * Also returns false if the @p index is out of range. */ static inline bool stepIsExecute( const ViewStepList& steps, int index ) { return ( 0 <= index ) && ( index < steps.count() ) && ( qobject_cast< ExecutionViewStep* >( steps.at( index ) ) != nullptr ); } static inline bool isAtVeryEnd( const ViewStepList& steps, int index ) { // If we have an empty list, then there's no point right now // in checking if we're at the end. if ( steps.count() == 0 ) { return false; } // .. and if the index is invalid, ignore it too if ( !( ( 0 <= index ) && ( index < steps.count() ) ) ) { return false; } return ( index >= steps.count() ) || ( index == steps.count() - 1 && steps.last()->isAtEnd() ); } void ViewManager::next() { if ( !currentStepValid() ) { return; } ViewStep* step = m_steps.at( m_currentStep ); bool executing = false; if ( step->isAtEnd() ) { const auto* const settings = Calamares::Settings::instance(); // Special case when the user clicks next on the very last page in a view phase // and right before switching to an execution phase. // Depending on Calamares::Settings, we show an "are you sure" prompt or not. if ( settings->showPromptBeforeExecution() && stepIsExecute( m_steps, m_currentStep + 1 ) ) { QString title = settings->isSetupMode() ? tr( "Continue with setup?" ) : tr( "Continue with installation?" ); QString question = settings->isSetupMode() ? tr( "The %1 setup program is about to make changes to your " "disk in order to set up %2.
You will not be able " "to undo these changes." ) : tr( "The %1 installer is about to make changes to your " "disk in order to install %2.
You will not be able " "to undo these changes." ); QString confirm = settings->isSetupMode() ? tr( "&Set up now" ) : tr( "&Install now" ); 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; } } m_currentStep++; m_stack->setCurrentIndex( m_currentStep ); // Does nothing if out of range step->onLeave(); if ( m_currentStep < m_steps.count() ) { m_steps.at( m_currentStep )->onActivate(); executing = qobject_cast< ExecutionViewStep* >( m_steps.at( m_currentStep ) ) != nullptr; emit currentStepChanged(); } else { // 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 ); } updateCancelEnabled( !settings->disableCancel() && !( executing && settings->disableCancelDuringExec() ) ); updateBackAndNextVisibility( !( executing && settings->hideBackAndNextDuringExec() ) ); } else { step->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() ); } updateButtonLabels(); } void ViewManager::updateButtonLabels() { const auto* const settings = Calamares::Settings::instance(); QString nextIsInstallationStep = settings->isSetupMode() ? tr( "&Set up" ) : tr( "&Install" ); QString quitOnCompleteTooltip = settings->isSetupMode() ? tr( "Setup is complete. Close the setup program." ) : tr( "The installation is complete. Close the installer." ); QString cancelBeforeInstallationTooltip = settings->isSetupMode() ? tr( "Cancel setup without changing the system." ) : tr( "Cancel installation without changing the system." ); // 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" ); } else { 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" ); // 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" ); updateCancelEnabled( true ); if ( settings->quitAtEnd() ) { quit(); } } else { if ( settings->disableCancel() ) { 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" ); } } void ViewManager::back() { if ( !currentStepValid() ) { return; } ViewStep* step = m_steps.at( m_currentStep ); if ( step->isAtBeginning() && m_currentStep > 0 ) { m_currentStep--; m_stack->setCurrentIndex( m_currentStep ); step->onLeave(); m_steps.at( m_currentStep )->onActivate(); emit currentStepChanged(); } else if ( !step->isAtBeginning() ) { step->back(); } else { return; } 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() ); updateButtonLabels(); } void ViewManager::quit() { if ( confirmCancelInstallation() ) { qApp->quit(); } } bool ViewManager::confirmCancelInstallation() { const auto* const settings = Calamares::Settings::instance(); // When we're at the very end, then it's always OK to exit. if ( isAtVeryEnd( m_steps, m_currentStep ) ) { return true; } // Not at the very end, cancel/quit might be disabled if ( settings->disableCancel() ) { return false; } if ( settings->disableCancelDuringExec() && stepIsExecute( m_steps, m_currentStep ) ) { return false; } // Otherwise, confirm cancel/quit. QString title = settings->isSetupMode() ? tr( "Cancel setup?" ) : tr( "Cancel installation?" ); QString question = settings->isSetupMode() ? tr( "Do you really want to cancel the current setup process?\n" "The setup program will quit and all changes will be lost." ) : tr( "Do you really want to cancel the current install process?\n" "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" ) ); int response = mb.exec(); return response == QMessageBox::Yes; } void ViewManager::updateCancelEnabled( bool 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 { if ( !index.isValid() ) { return QVariant(); } if ( ( index.row() < 0 ) || ( index.row() >= m_steps.length() ) ) { return QVariant(); } const auto* step = m_steps.at( index.row() ); if ( !step ) { return QVariant(); } switch ( role ) { case Qt::DisplayRole: return step->prettyName(); case Qt::ToolTipRole: if ( Calamares::Settings::instance()->debugMode() ) { auto key = step->moduleInstanceKey(); QString toolTip( "Debug information" ); toolTip.append( "
Type:\tViewStep" ); toolTip.append( QString( "
Pretty:\t%1" ).arg( step->prettyName() ) ); toolTip.append( QString( "
Status:\t%1" ).arg( step->prettyStatus() ) ); toolTip.append( QString( "
Source:\t%1" ).arg( key.isValid() ? key.toString() : QStringLiteral( "built-in" ) ) ); return toolTip; } else { return QVariant(); } case ProgressTreeItemCurrentIndex: return m_currentStep; default: return QVariant(); } } int ViewManager::rowCount( const QModelIndex& parent ) const { if ( parent.column() > 0 ) { return 0; } 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 calamares-3.2.41.1/src/libcalamaresui/ViewManager.h000066400000000000000000000226041410275732300220220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef VIEWMANAGER_H #define VIEWMANAGER_H #include "DllMacro.h" #include "viewpages/ViewStep.h" #include #include #include #include namespace Calamares { /** * @brief The ViewManager class handles progression through view pages. * @note Singleton object, only use through ViewManager::instance(). */ class UIDLLEXPORT ViewManager : public QAbstractListModel { Q_OBJECT Q_PROPERTY( int currentStepIndex READ currentStepIndex NOTIFY currentStepChanged FINAL ) Q_PROPERTY( bool nextEnabled READ nextEnabled NOTIFY nextEnabledChanged FINAL ) Q_PROPERTY( QString nextLabel READ nextLabel NOTIFY nextLabelChanged FINAL ) Q_PROPERTY( QString nextIcon READ nextIcon NOTIFY nextIconChanged FINAL ) Q_PROPERTY( bool backEnabled READ backEnabled NOTIFY backEnabledChanged FINAL ) Q_PROPERTY( QString backLabel READ backLabel NOTIFY backLabelChanged FINAL ) Q_PROPERTY( QString backIcon READ backIcon NOTIFY backIconChanged FINAL ) Q_PROPERTY( bool quitEnabled READ quitEnabled NOTIFY quitEnabledChanged FINAL ) Q_PROPERTY( QString quitLabel READ quitLabel NOTIFY quitLabelChanged FINAL ) Q_PROPERTY( QString quitIcon READ quitIcon NOTIFY quitIconChanged FINAL ) Q_PROPERTY( QString quitTooltip READ quitTooltip NOTIFY quitTooltipChanged FINAL ) 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. * @return pointer to the singleton instance. */ static ViewManager* instance(); static ViewManager* instance( QObject* parent ); /** * @brief centralWidget always returns the central widget in the Calamares main * window. * @return a pointer to the active QWidget (usually a wizard page provided by a * view module). */ QWidget* centralWidget(); /** * @brief addViewStep appends a view step to the roster. * @param step a pointer to the ViewStep object to add. * @note a ViewStep is the active instance of a view module, it aggregates one * or more view pages, plus zero or more jobs which may be created at runtime. */ void addViewStep( ViewStep* step ); /** * @brief viewSteps returns the list of currently present view steps. * @return the ViewStepList. * This should only return an empty list before startup is complete. */ ViewStepList viewSteps() const; /** * @brief currentStep returns the currently active ViewStep, i.e. the ViewStep * which owns the currently visible view page. * @return the active ViewStep. Do not confuse this with centralWidget(). * @see ViewStep::centralWidget */ ViewStep* currentStep() const; /** * @brief currentStepIndex returns the index of the currently active ViewStep. * @return the index. */ int currentStepIndex() const; /** * @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. * * @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), * or to the first page of the next ViewStep if the current ViewStep doesn't * have any more pages. */ void next(); bool nextEnabled() const { return m_nextEnabled; ///< Is the next-button to be enabled } QString nextLabel() const { return m_nextLabel; ///< What should be displayed on the next-button } QString nextIcon() const { return m_nextIcon; ///< Name of the icon to show } /** * @brief back moves backward to the previous page of the current ViewStep (if any), * or to the last page of the previous ViewStep if the current ViewStep doesn't * have any pages before the current one. */ void back(); bool backEnabled() const { return m_backEnabled; ///< Is the back-button to be enabled } QString backLabel() const { return m_backLabel; ///< What should be displayed on the back-button } QString backIcon() const { 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 * * Asks for confirmation if necessary. Terminates the application. */ void quit(); bool quitEnabled() const { return m_quitEnabled; ///< Is the quit-button to be enabled } QString quitLabel() const { return m_quitLabel; ///< What should be displayed on the quit-button } QString quitIcon() const { return m_quitIcon; ///< Name of the icon to show } bool quitVisible() const { return m_quitVisible; ///< Should the quit-button be visible } QString quitTooltip() const { return m_quitTooltip; } /** * @brief onInstallationFailed displays an error message when a fatal failure * happens in a ViewStep. * @param message the error string. * @param details the details string. */ void onInstallationFailed( const QString& message, const QString& details ); /** @brief Replaces the stack with a view step stating that initialization failed. * * @param modules a list of failed modules. */ void onInitFailed( const QStringList& modules ); /** @brief Tell the manager that initialization / loading is complete. * * Call this at least once, to tell the manager to activate the first page. */ void onInitComplete(); /// @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 ensureSize( QSize size ) const; // See ViewStep::ensureSize() void cancelEnabled( bool enabled ) const; void nextEnabledChanged( bool ) const; void nextLabelChanged( QString ) const; void nextIconChanged( QString ) const; void backEnabledChanged( bool ) const; void backLabelChanged( QString ) const; void backIconChanged( QString ) const; void backAndNextVisibleChanged( bool ) const; void quitEnabledChanged( bool ) const; void quitLabelChanged( QString ) const; void quitIconChanged( QString ) const; void quitVisibleChanged( bool ) const; void quitTooltipChanged( QString ) const; private: explicit ViewManager( QObject* parent = nullptr ); ~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() ); } static ViewManager* s_instance; ViewStepList m_steps; int m_currentStep; QWidget* m_widget; QStackedWidget* m_stack; bool m_nextEnabled = false; QString m_nextLabel; QString m_nextIcon; ///< Name of icon to show on button bool m_backEnabled = false; 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 * * These are the methods and enums used for the as-a-model part * of the ViewManager. */ enum Role { ProgressTreeItemCurrentIndex = Qt::UserRole + 13 ///< Index (row) of the current step }; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; }; } // namespace Calamares #endif // VIEWMANAGER_H calamares-3.2.41.1/src/libcalamaresui/libcalamaresui.qrc000066400000000000000000000035501410275732300231270ustar00rootroot00000000000000 ../../data/images/yes.svgz ../../data/images/no.svgz ../../data/images/information.svgz ../../data/images/fail.svgz ../../data/images/bugs.svg ../../data/images/help.svg ../../data/images/release.svg ../../data/images/help-donate.svg ../../data/images/partition-disk.svg ../../data/images/partition-partition.svg ../../data/images/partition-alongside.svg ../../data/images/partition-erase-auto.svg ../../data/images/partition-manual.svg ../../data/images/partition-replace-os.svg ../../data/images/boot-environment.svg ../../data/images/partition-table.svg ../../data/images/squid.svg ../../data/images/state-ok.svg ../../data/images/state-warning.svg ../../data/images/state-error.svg calamares-3.2.41.1/src/libcalamaresui/modulesystem/000077500000000000000000000000001410275732300221725ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamaresui/modulesystem/CppJobModule.cpp000066400000000000000000000054471410275732300252330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CppJobModule.h" #include "CppJob.h" #include "utils/Logger.h" #include "utils/PluginFactory.h" #include #include namespace Calamares { Module::Type CppJobModule::type() const { return Module::Type::Job; } Module::Interface CppJobModule::interface() const { return Module::Interface::QtPlugin; } void CppJobModule::loadSelf() { if ( m_loader ) { CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { cDebug() << "Could not load module:" << m_loader->errorString(); return; } CppJob* cppJob = pf->create< Calamares::CppJob >(); if ( !cppJob ) { cDebug() << "Could not load module:" << m_loader->errorString(); return; } // cDebug() << "CppJobModule loading self for instance" << instanceKey() // << "\nCppJobModule at address" << this // << "\nCalamares::PluginFactory at address" << pf // << "\nCppJob at address" << cppJob; cppJob->setModuleInstanceKey( instanceKey() ); cppJob->setConfigurationMap( m_configurationMap ); m_job = Calamares::job_ptr( static_cast< Calamares::Job* >( cppJob ) ); m_loaded = true; cDebug() << "CppJobModule" << instanceKey() << "loading complete."; } } JobList CppJobModule::jobs() const { return JobList() << m_job; } void CppJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); QString load = moduleDescriptor.load(); if ( !load.isEmpty() ) { load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. if ( load.isEmpty() || !QLibrary::isLibrary( load ) ) { const QStringList ls = directory.entryList( QStringList { "*.so" } ); if ( !ls.isEmpty() ) { for ( QString entry : ls ) { entry = directory.absoluteFilePath( entry ); if ( QLibrary::isLibrary( entry ) ) { load = entry; break; } } } } m_loader = new QPluginLoader( load ); } CppJobModule::CppJobModule() : Module() , m_loader( nullptr ) { } CppJobModule::~CppJobModule() { delete m_loader; } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/CppJobModule.h000066400000000000000000000025541410275732300246740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CALAMARES_CPPJOBMODULE_H #define CALAMARES_CPPJOBMODULE_H #include "DllMacro.h" #include "modulesystem/Module.h" class QPluginLoader; namespace Calamares { class UIDLLEXPORT CppJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit CppJobModule(); ~CppJobModule() override; QPluginLoader* m_loader; job_ptr m_job; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_CPPJOBMODULE_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/ModuleFactory.cpp000066400000000000000000000102761410275732300254610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ModuleFactory.h" #include "CalamaresConfig.h" #include "CppJobModule.h" #include "ProcessJobModule.h" #include "ViewModule.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" #ifdef WITH_PYTHON #include "PythonJobModule.h" #endif #ifdef WITH_PYTHONQT #include "PythonQtViewModule.h" #endif #include #include #include #include namespace Calamares { Module* moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ) { using Type = Calamares::ModuleSystem::Type; using Interface = Calamares::ModuleSystem::Interface; std::unique_ptr< Module > m; if ( !moduleDescriptor.isValid() ) { cError() << "Bad module descriptor format" << instanceId; return nullptr; } if ( moduleDescriptor.type() == Type::View ) { if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new ViewModule() ); } else if ( moduleDescriptor.interface() == Interface::PythonQt ) { #ifdef WITH_PYTHONQT m.reset( new PythonQtViewModule() ); #else cError() << "PythonQt view modules are not supported in this version of Calamares."; #endif } else { cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else if ( moduleDescriptor.type() == Type::Job ) { if ( moduleDescriptor.interface() == Interface::QtPlugin ) { m.reset( new CppJobModule() ); } else if ( moduleDescriptor.interface() == Interface::Process ) { m.reset( new ProcessJobModule() ); } else if ( moduleDescriptor.interface() == Interface::Python ) { #ifdef WITH_PYTHON m.reset( new PythonJobModule() ); #else cError() << "Python modules are not supported in this version of Calamares."; #endif } else { cError() << "Bad interface" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << "for module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } } else { cError() << "Bad module type" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ); } if ( !m ) { cError() << "Bad module type (" << Calamares::ModuleSystem::typeNames().find( moduleDescriptor.type() ) << ") or interface string (" << Calamares::ModuleSystem::interfaceNames().find( moduleDescriptor.interface() ) << ") for module " << instanceId; return nullptr; } QDir moduleDir( moduleDirectory ); if ( moduleDir.exists() && moduleDir.isReadable() ) { m->m_directory = moduleDir.absolutePath(); } else { cError() << "Bad module directory" << moduleDirectory << "for" << instanceId; return nullptr; } m->initFrom( moduleDescriptor, instanceId ); if ( !m->m_key.isValid() ) { cError() << "Module" << instanceId << "invalid ID"; return nullptr; } m->initFrom( moduleDescriptor ); if ( !configFileName.isEmpty() ) { try { m->loadConfigurationFile( configFileName ); } catch ( YAML::Exception& e ) { cError() << "YAML parser error " << e.what(); return nullptr; } } return m.release(); } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/ModuleFactory.h000066400000000000000000000024771410275732300251320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_MODULEFACTORY_H #define CALAMARES_MODULEFACTORY_H #include "DllMacro.h" #include "modulesystem/Descriptor.h" #include "modulesystem/Module.h" #include namespace Calamares { /** * @brief fromDescriptor creates a new Module object of the correct type. * @param moduleDescriptor a module descriptor, already parsed into a variant map. * @param instanceId the instance id of the new module instance. * @param configFileName the name of the configuration file to read. * @param moduleDirectory the path to the directory with this module's files. * @return a pointer to an object of a subtype of Module. */ UIDLLEXPORT Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); } // namespace Calamares #endif // CALAMARES_MODULEFACTORY_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/ModuleManager.cpp000066400000000000000000000343411410275732300254230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "ModuleManager.h" #include "ViewManager.h" #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" #include #include #include namespace Calamares { ModuleManager* ModuleManager::s_instance = nullptr; ModuleManager* ModuleManager::instance() { return s_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; } ModuleManager::~ModuleManager() { // The map is populated with Module::fromDescriptor(), which allocates on the heap. for ( auto moduleptr : m_loadedModulesByInstanceKey ) { delete moduleptr; } } void ModuleManager::init() { QTimer::singleShot( 0, this, &ModuleManager::doInit ); } void ModuleManager::doInit() { // We start from a list of paths in m_paths. Each of those is a directory that // might (should) contain Calamares modules of any type/interface. // For each modules search path (directory), it is expected that each module // lives in its own subdirectory. This subdirectory must have the same name as // 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 ); if ( currentDir.exists() && currentDir.isReadable() ) { const QStringList subdirs = currentDir.entryList( QDir::AllDirs | QDir::NoDotAndDotDot ); for ( const QString& subdir : subdirs ) { currentDir.setPath( path ); bool success = currentDir.cd( subdir ); if ( success ) { static const char bad_descriptor[] = "ModuleManager potential module descriptor is bad"; QFileInfo descriptorFileInfo( currentDir.absoluteFilePath( QLatin1String( "module.desc" ) ) ); if ( !descriptorFileInfo.exists() ) { cDebug() << deb << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(missing)"; continue; } if ( !descriptorFileInfo.isReadable() ) { cDebug() << deb << bad_descriptor << descriptorFileInfo.absoluteFilePath() << "(unreadable)"; continue; } bool ok = false; QVariantMap moduleDescriptorMap = CalamaresUtils::loadYaml( descriptorFileInfo, &ok ); QString moduleName = ok ? moduleDescriptorMap.value( "name" ).toString() : QString(); if ( ok && !moduleName.isEmpty() && ( moduleName == currentDir.dirName() ) && !m_availableDescriptorsByModuleName.contains( moduleName ) ) { auto descriptor = Calamares::ModuleSystem::Descriptor::fromDescriptorData( moduleDescriptorMap ); descriptor.setDirectory( descriptorFileInfo.absoluteDir().absolutePath() ); m_availableDescriptorsByModuleName.insert( moduleName, descriptor ); } } else { cWarning() << "ModuleManager module directory is not accessible:" << path << "/" << subdir; } } } else { 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() << deb << "Found" << m_availableDescriptorsByModuleName.count() << "modules"; QTimer::singleShot( 10, this, &ModuleManager::initDone ); } QList< ModuleSystem::InstanceKey > ModuleManager::loadedInstanceKeys() { return m_loadedModulesByInstanceKey.keys(); } Calamares::ModuleSystem::Descriptor ModuleManager::moduleDescriptor( const QString& name ) { return m_availableDescriptorsByModuleName.value( name ); } Module* ModuleManager::moduleInstance( const ModuleSystem::InstanceKey& instanceKey ) { return m_loadedModulesByInstanceKey.value( 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& descriptorList, const ModuleSystem::InstanceKey& instanceKey, const ModuleSystem::Descriptor& thisModule ) { if ( !thisModule.hasConfig() ) { // 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(); } for ( const auto& descriptor : descriptorList ) { if ( descriptor.key() == instanceKey ) { return descriptor.configFileName(); } } // This should already have been checked and failed the module already return QString(); } void ModuleManager::loadModules() { if ( checkDependencies() ) { cWarning() << "Some installed modules have unmet dependencies."; } Settings::InstanceDescriptionList customInstances = Settings::instance()->moduleInstances(); QStringList failedModules; const auto modulesSequence = Settings::instance()->modulesSequence(); for ( const auto& modulePhase : modulesSequence ) { ModuleSystem::Action currentAction = modulePhase.first; for ( const auto& instanceKey : modulePhase.second ) { if ( !instanceKey.isValid() ) { cError() << "Wrong module entry format for module" << instanceKey; failedModules.append( instanceKey.toString() ); continue; } ModuleSystem::Descriptor descriptor = m_availableDescriptorsByModuleName.value( instanceKey.module(), ModuleSystem::Descriptor() ); if ( !descriptor.isValid() ) { cError() << "Module" << instanceKey.toString() << "not found in module search paths." << Logger::DebugList( m_paths ); failedModules.append( instanceKey.toString() ); continue; } QString configFileName = getConfigFileName( customInstances, instanceKey, descriptor ); // So now we can assume that the module entry is at least valid, // that we have a descriptor on hand (and therefore that the // module exists), and that the instance is either default or // defined in the custom instances section. // We still don't know whether the config file for the entry // exists and is valid, but that's the only thing that could fail // from this point on. -- Teo 8/2015 Module* thisModule = m_loadedModulesByInstanceKey.value( instanceKey, nullptr ); if ( thisModule ) { if ( thisModule->isLoaded() ) { // It's been listed before, don't bother loading again. // This can happen for a module listed twice (e.g. with custom instances) cDebug() << "Module" << instanceKey.toString() << "already loaded."; } else { // An attempt was made, earlier, and that failed. // This can happen for a module listed twice (e.g. with custom instances) cError() << "Module" << instanceKey.toString() << "exists but not loaded."; failedModules.append( instanceKey.toString() ); continue; } } else { thisModule = Calamares::moduleFromDescriptor( descriptor, instanceKey.id(), configFileName, descriptor.directory() ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" << configFileName; failedModules.append( instanceKey.toString() ); continue; } if ( !addModule( thisModule ) ) { // Error message is already printed 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() ); 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 ); } } } if ( !failedModules.isEmpty() ) { ViewManager::instance()->onInitFailed( failedModules ); QTimer::singleShot( 10, [=]() { emit modulesFailed( failedModules ); } ); } else { 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() { cDebug() << "Checking module requirements .."; QVector< Module* > modules( m_loadedModulesByInstanceKey.count() ); int count = 0; for ( const auto& module : m_loadedModulesByInstanceKey ) { modules[ count++ ] = module; } 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, ModuleSystem::Descriptor >& available ) { QStringList l; for ( const QString& depName : required ) { if ( !available.contains( depName ) ) { l.append( depName ); } } return l; } size_t ModuleManager::checkDependencies() { size_t numberRemoved = 0; bool somethingWasRemovedBecauseOfUnmetDependencies = false; // This goes through the map of available modules, and deletes those whose // dependencies are not met, if any. do { somethingWasRemovedBecauseOfUnmetDependencies = false; for ( auto it = m_availableDescriptorsByModuleName.begin(); it != m_availableDescriptorsByModuleName.end(); ++it ) { QStringList unmet = missingRequiredModules( it->requiredModules(), m_availableDescriptorsByModuleName ); if ( unmet.count() > 0 ) { QString moduleName = it->name(); somethingWasRemovedBecauseOfUnmetDependencies = true; m_availableDescriptorsByModuleName.erase( it ); numberRemoved++; cWarning() << "Module" << moduleName << "requires missing modules" << Logger::DebugList( unmet ); break; } } } while ( somethingWasRemovedBecauseOfUnmetDependencies ); return numberRemoved; } 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() ].requiredModules(); for ( const QString& required : requiredModules ) { bool requirementFound = false; for ( const Module* v : m_loadedModulesByInstanceKey ) if ( required == v->name() ) { requirementFound = true; break; } if ( !requirementFound ) { cError() << "Module" << m.name() << "requires" << required << "before it in sequence."; allRequirementsFound = false; } } return allRequirementsFound; } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/ModuleManager.h000066400000000000000000000135251410275732300250710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 MODULELOADER_H #define MODULELOADER_H #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" #include "modulesystem/Requirement.h" #include #include #include namespace Calamares { class Module; class RequirementsModel; /** * @brief The ModuleManager class is a singleton which manages Calamares modules. * * It goes through the module search directories and reads module metadata. It then * constructs objects of type Module, loads them and makes them accessible by their * instance key. */ class ModuleManager : public QObject { Q_OBJECT public: explicit ModuleManager( const QStringList& paths, QObject* parent = nullptr ); ~ModuleManager() override; static ModuleManager* instance(); /** * @brief init goes through the module search directories and gets a list of * modules available for loading, along with their metadata. * This information is stored as a map of Module* objects, indexed by name. */ void init(); /** * @brief loadedInstanceKeys returns a list of instance keys for the available * modules. * @return a QStringList with the instance keys. */ QList< ModuleSystem::InstanceKey > loadedInstanceKeys(); /** * @brief moduleDescriptor returns the module descriptor structure for a given module. * @param name the name of the module for which to return the module descriptor. * @return the module descriptor, as a variant map already parsed from YAML. */ 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 ModuleSystem::InstanceKey& instanceKey ); /** * @brief loadModules does all of the module loading operation. * When this is done, the signal modulesLoaded is emitted. * It is recommended to call this from a single-shot QTimer. */ 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 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(); /** @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(); private: /** * Check in a general sense whether the dependencies between * modules are valid. Returns the number of modules that * have missing dependencies -- this is **not** a problem * unless any of those modules are actually used. * * Returns 0 on success. * * Also modifies m_availableDescriptorsByModuleName to remove * all the entries that (so that later, when we try to look * them up, they are not found). */ size_t checkDependencies(); /** * Check for this specific module if its required modules have * already been loaded (i.e. are in sequence before it). * * Returns true if the requirements are met. */ bool checkModuleDependencies( const Module& ); QMap< QString, ModuleSystem::Descriptor > m_availableDescriptorsByModuleName; QMap< ModuleSystem::InstanceKey, Module* > m_loadedModulesByInstanceKey; const QStringList m_paths; RequirementsModel* m_requirementsModel; static ModuleManager* s_instance; }; } // namespace Calamares #endif // MODULELOADER_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/ProcessJobModule.cpp000066400000000000000000000025241410275732300261200ustar00rootroot00000000000000/* === 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. * */ #include "ProcessJobModule.h" #include "ProcessJob.h" #include namespace Calamares { Module::Type ProcessJobModule::type() const { return Module::Type::Job; } Module::Interface ProcessJobModule::interface() const { return Module::Interface::Process; } void ProcessJobModule::loadSelf() { if ( m_loaded ) { return; } m_job = job_ptr( new ProcessJob( m_command, m_workingPath, m_runInChroot, m_secondsTimeout ) ); m_loaded = true; } JobList ProcessJobModule::jobs() const { return JobList() << m_job; } void ProcessJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); m_command = moduleDescriptor.command(); m_secondsTimeout = std::chrono::seconds( moduleDescriptor.timeout() ); m_runInChroot = moduleDescriptor.chroot(); } ProcessJobModule::ProcessJobModule() : Module() , m_secondsTimeout( std::chrono::seconds( 30 ) ) , m_runInChroot( false ) { } ProcessJobModule::~ProcessJobModule() {} } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/ProcessJobModule.h000066400000000000000000000026211410275732300255630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_PROCESSJOBMODULE_H #define CALAMARES_PROCESSJOBMODULE_H #include "DllMacro.h" #include "modulesystem/Module.h" #include namespace Calamares { class UIDLLEXPORT ProcessJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ProcessJobModule(); ~ProcessJobModule() override; QString m_command; QString m_workingPath; std::chrono::seconds m_secondsTimeout; bool m_runInChroot; job_ptr m_job; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_PROCESSJOBMODULE_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/PythonJobModule.cpp000066400000000000000000000022061410275732300257600ustar00rootroot00000000000000/* === 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. * */ #include "PythonJobModule.h" #include "PythonJob.h" #include namespace Calamares { Module::Type PythonJobModule::type() const { return Module::Type::Job; } Module::Interface PythonJobModule::interface() const { return Module::Interface::Python; } void PythonJobModule::loadSelf() { if ( m_loaded ) { return; } m_job = Calamares::job_ptr( new PythonJob( m_scriptFileName, m_workingPath, m_configurationMap ) ); m_loaded = true; } JobList PythonJobModule::jobs() const { return JobList() << m_job; } void PythonJobModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); m_scriptFileName = moduleDescriptor.script(); } PythonJobModule::PythonJobModule() : Module() { } PythonJobModule::~PythonJobModule() {} } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/PythonJobModule.h000066400000000000000000000023711410275732300254300ustar00rootroot00000000000000/* === 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 CALAMARES_PYTHONJOBMODULE_H #define CALAMARES_PYTHONJOBMODULE_H #include "DllMacro.h" #include "modulesystem/Module.h" namespace Calamares { class UIDLLEXPORT PythonJobModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit PythonJobModule(); ~PythonJobModule() override; QString m_scriptFileName; QString m_workingPath; job_ptr m_job; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_PYTHONJOBMODULE_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/PythonQtViewModule.cpp000066400000000000000000000134331410275732300264710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PythonQtViewModule.h" #include "CalamaresConfig.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/Logger.h" #include "viewpages/PythonQtGlobalStorageWrapper.h" #include "viewpages/PythonQtUtilsWrapper.h" #include "viewpages/PythonQtViewStep.h" #include "viewpages/ViewStep.h" #include #include #include #include static QPointer< GlobalStorage > s_gs = nullptr; static QPointer< Utils > s_utils = nullptr; namespace Calamares { Module::Type PythonQtViewModule::type() const { return Module::Type::View; } Module::Interface PythonQtViewModule::interface() const { return Module::Interface::PythonQt; } void PythonQtViewModule::loadSelf() { if ( !m_scriptFileName.isEmpty() ) { if ( PythonQt::self() == nullptr ) { if ( Py_IsInitialized() ) PythonQt::init( PythonQt::IgnoreSiteModule | PythonQt::RedirectStdOut | PythonQt::PythonAlreadyInitialized ); else { PythonQt::init(); } PythonQt_QtAll::init(); cDebug() << "Initializing PythonQt bindings." << "This should only happen once."; //TODO: register classes here into the PythonQt environment, like this: //PythonQt::self()->registerClass( &PythonQtViewStep::staticMetaObject, // "calamares" ); // We only do the following to force PythonQt to create a submodule // "calamares" for us to put our static objects in PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject, "calamares" ); // Get a PythonQtObjectPtr to the PythonQt.calamares submodule PythonQtObjectPtr pqtm = PythonQt::priv()->pythonQtModule(); PythonQtObjectPtr cala = PythonQt::self()->lookupObject( pqtm, "calamares" ); // Prepare GlobalStorage object, in module PythonQt.calamares if ( !s_gs ) { s_gs = new ::GlobalStorage( Calamares::JobQueue::instance()->globalStorage() ); } cala.addObject( "global_storage", s_gs ); // Prepare Utils object, in module PythonQt.calamares if ( !s_utils ) { s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() ); } cala.addObject( "utils", s_utils ); // Append configuration object, in module PythonQt.calamares 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; } ); } QDir workingDir( m_workingPath ); if ( !workingDir.exists() ) { cDebug() << "Invalid working directory" << m_workingPath << "for module" << name(); return; } QString fullPath = workingDir.absoluteFilePath( m_scriptFileName ); QFileInfo scriptFileInfo( fullPath ); if ( !scriptFileInfo.isReadable() ) { cDebug() << "Invalid main script file path" << fullPath << "for module" << name(); return; } // Construct empty Python module with the given name PythonQtObjectPtr cxt = PythonQt::self()->createModuleFromScript( name() ); if ( cxt.isNull() ) { cDebug() << "Cannot load PythonQt context from file" << fullPath << "for module" << name(); return; } static const QLatin1String calamares_module_annotation( "_calamares_module_typename = ''\n" "def calamares_module(viewmodule_type):\n" " global _calamares_module_typename\n" " _calamares_module_typename = viewmodule_type.__name__\n" " return viewmodule_type\n" ); // Load in the decorator PythonQt::self()->evalScript( cxt, calamares_module_annotation ); // Load the module PythonQt::self()->evalFile( cxt, fullPath ); m_viewStep = new PythonQtViewStep( cxt ); cDebug() << "PythonQtViewModule loading self for instance" << instanceKey() << "\nPythonQtViewModule at address" << this << "\nViewStep at address" << m_viewStep; m_viewStep->setModuleInstanceKey( instanceKey() ); m_viewStep->setConfigurationMap( m_configurationMap ); ViewManager::instance()->addViewStep( m_viewStep ); m_loaded = true; cDebug() << "PythonQtViewModule" << instanceKey() << "loading complete."; } } JobList PythonQtViewModule::jobs() const { return m_viewStep->jobs(); } void PythonQtViewModule::initFrom( const QVariantMap& moduleDescriptor ) { QDir directory( location() ); m_workingPath = directory.absolutePath(); if ( !moduleDescriptor.value( "script" ).toString().isEmpty() ) { m_scriptFileName = moduleDescriptor.value( "script" ).toString(); } } PythonQtViewModule::PythonQtViewModule() : Module() { } PythonQtViewModule::~PythonQtViewModule() {} } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/PythonQtViewModule.h000066400000000000000000000024231410275732300261330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_PYTHONQTVIEWMODULE_H #define CALAMARES_PYTHONQTVIEWMODULE_H #include "DllMacro.h" #include "Module.h" namespace Calamares { class ViewStep; class UIDLLEXPORT PythonQtViewModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: explicit PythonQtViewModule(); virtual ~PythonQtViewModule(); ViewStep* m_viewStep = nullptr; QString m_scriptFileName; QString m_workingPath; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_PYTHONQTVIEWMODULE_H calamares-3.2.41.1/src/libcalamaresui/modulesystem/ViewModule.cpp000066400000000000000000000053751410275732300247700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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. * */ #include "ViewModule.h" #include "ViewManager.h" #include "utils/Logger.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include namespace Calamares { Module::Type ViewModule::type() const { return Module::Type::View; } Module::Interface ViewModule::interface() const { return Module::Interface::QtPlugin; } void ViewModule::loadSelf() { if ( m_loader ) { CalamaresPluginFactory* pf = qobject_cast< CalamaresPluginFactory* >( m_loader->instance() ); if ( !pf ) { cWarning() << "No factory:" << m_loader->errorString(); return; } m_viewStep = pf->create< Calamares::ViewStep >(); if ( !m_viewStep ) { cWarning() << "create() failed" << m_loader->errorString(); return; } } // If any method created the view step, use it now. if ( m_viewStep ) { m_viewStep->setModuleInstanceKey( instanceKey() ); m_viewStep->setConfigurationMap( m_configurationMap ); ViewManager::instance()->addViewStep( m_viewStep ); m_loaded = true; cDebug() << "ViewModule" << instanceKey() << "loading complete."; } else { cWarning() << "No view step was created"; } } JobList ViewModule::jobs() const { return m_viewStep->jobs(); } void ViewModule::initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) { QDir directory( location() ); QString load = moduleDescriptor.load(); if ( !load.isEmpty() ) { load = directory.absoluteFilePath( load ); } // If a load path is not specified, we look for a plugin to load in the directory. if ( load.isEmpty() || !QLibrary::isLibrary( load ) ) { const QStringList ls = directory.entryList( QStringList { "*.so" } ); if ( !ls.isEmpty() ) { for ( QString entry : ls ) { entry = directory.absoluteFilePath( entry ); if ( QLibrary::isLibrary( entry ) ) { load = entry; break; } } } } m_loader = new QPluginLoader( load ); } ViewModule::ViewModule() : Module() , m_loader( nullptr ) { } ViewModule::~ViewModule() { delete m_loader; } RequirementsList ViewModule::checkRequirements() { return m_viewStep->checkRequirements(); } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/modulesystem/ViewModule.h000066400000000000000000000025561410275732300244330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CALAMARES_VIEWMODULE_H #define CALAMARES_VIEWMODULE_H #include "DllMacro.h" #include "modulesystem/Module.h" class QPluginLoader; namespace Calamares { class ViewStep; class UIDLLEXPORT ViewModule : public Module { public: Type type() const override; Interface interface() const override; void loadSelf() override; JobList jobs() const override; RequirementsList checkRequirements() override; protected: void initFrom( const ModuleSystem::Descriptor& moduleDescriptor ) override; private: explicit ViewModule(); ~ViewModule() override; QPluginLoader* m_loader; ViewStep* m_viewStep = nullptr; friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, const QString& instanceId, const QString& configFileName, const QString& moduleDirectory ); }; } // namespace Calamares #endif // CALAMARES_VIEWMODULE_H calamares-3.2.41.1/src/libcalamaresui/utils/000077500000000000000000000000001410275732300206005ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamaresui/utils/CalamaresUtilsGui.cpp000066400000000000000000000141311410275732300246620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "CalamaresUtilsGui.h" #include "ImageRegistry.h" #include #include #include #include #include #include #include #define RESPATH ":/data/" namespace CalamaresUtils { static int s_defaultFontSize = 0; static int s_defaultFontHeight = 0; QPixmap defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) { Q_UNUSED( mode ) QPixmap pixmap; switch ( type ) { case Yes: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/yes.svgz", size ); break; case No: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/no.svgz", size ); break; case Information: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/information.svgz", size ); break; case Fail: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/fail.svgz", size ); break; case Bugs: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/bugs.svg", size ); break; case Help: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/help.svg", size ); break; case Release: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/release.svg", size ); break; case Donate: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/donate.svg", size ); break; case PartitionDisk: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-disk.svg", size ); break; case PartitionPartition: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-partition.svg", size ); break; case PartitionAlongside: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-alongside.svg", size ); break; case PartitionEraseAuto: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-erase-auto.svg", size ); break; case PartitionManual: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-manual.svg", size ); break; case PartitionReplaceOs: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-replace-os.svg", size ); break; case PartitionTable: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/partition-table.svg", size ); break; case BootEnvironment: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/boot-environment.svg", size ); break; case Squid: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/squid.svg", size ); break; case StatusOk: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-ok.svg", size ); break; case StatusWarning: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-warning.svg", size ); break; case StatusError: pixmap = ImageRegistry::instance()->pixmap( RESPATH "images/state-error.svg", size ); break; } if ( pixmap.isNull() ) { Q_ASSERT( false ); return QPixmap(); } return pixmap; } QPixmap createRoundedImage( const QPixmap& pixmap, const QSize& size, float frameWidthPct ) { int height; int width; if ( !size.isEmpty() ) { height = size.height(); width = size.width(); } else { height = pixmap.height(); width = pixmap.width(); } if ( !height || !width ) { return QPixmap(); } QPixmap scaledAvatar = pixmap.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); if ( frameWidthPct == 0.00f ) { return scaledAvatar; } QPixmap frame( width, height ); frame.fill( Qt::transparent ); QPainter painter( &frame ); painter.setRenderHint( QPainter::Antialiasing ); QRect outerRect( 0, 0, width, height ); QBrush brush( scaledAvatar ); QPen pen; pen.setColor( Qt::transparent ); pen.setJoinStyle( Qt::RoundJoin ); painter.setBrush( brush ); painter.setPen( pen ); painter.drawRoundedRect( outerRect, qreal( frameWidthPct ) * 100.0, qreal( frameWidthPct ) * 100.0, Qt::RelativeSize ); return frame; } void unmarginLayout( QLayout* layout ) { layout->setContentsMargins( 0, 0, 0, 0 ); layout->setMargin( 0 ); layout->setSpacing( 0 ); for ( int i = 0; i < layout->count(); i++ ) { QLayout* childLayout = layout->itemAt( i )->layout(); if ( childLayout ) { unmarginLayout( childLayout ); } } } int defaultFontSize() { if ( s_defaultFontSize <= 0 ) { s_defaultFontSize = QFont().pointSize(); } return s_defaultFontSize; } int defaultFontHeight() { if ( s_defaultFontHeight <= 0 ) { QFont f; f.setPointSize( defaultFontSize() ); s_defaultFontHeight = QFontMetrics( f ).height(); } return s_defaultFontHeight; } QFont defaultFont() { QFont f; f.setPointSize( defaultFontSize() ); return f; } QFont largeFont() { QFont f; f.setPointSize( defaultFontSize() + 4 ); return f; } void setDefaultFontSize( int points ) { s_defaultFontSize = points; s_defaultFontHeight = 0; // Recalculate on next call to defaultFontHeight() } QSize defaultIconSize() { const int w = int( defaultFontHeight() * 1.6 ); return QSize( w, w ); } void clearLayout( QLayout* layout ) { while ( QLayoutItem* item = layout->takeAt( 0 ) ) { if ( QWidget* widget = item->widget() ) { widget->deleteLater(); } if ( QLayout* childLayout = item->layout() ) { clearLayout( childLayout ); } delete item; } } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamaresui/utils/CalamaresUtilsGui.h000066400000000000000000000065731410275732300243420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CALAMARESUTILSGUI_H #define CALAMARESUTILSGUI_H #include "DllMacro.h" #include #include #include class QLayout; namespace CalamaresUtils { /** * @brief The ImageType enum lists all common Calamares icons. * Icons are loaded from SVGs and cached. Each icon has an enum value, through which * it can be accessed. * You can forward-declare this as: * enum ImageType : int; */ enum ImageType : int { Yes, No, Information, Fail, Bugs, Help, Release, Donate, PartitionDisk, PartitionPartition, PartitionAlongside, PartitionEraseAuto, PartitionManual, PartitionReplaceOs, PartitionTable, BootEnvironment, Squid, StatusOk, // Icons for the requirements checker StatusWarning, StatusError }; /** * @brief The ImageMode enum contains different transformations that can be applied. * Most of these are currently unused. */ enum ImageMode { Original, CoverInCase, Grid, DropShadow, RoundedCorners }; /** * @brief defaultPixmap returns a resized and/or transformed pixmap for a given * ImageType. * @param type the ImageType i.e. the enum value for an SVG. * @param mode the transformation to apply (default: no transformation). * @param size the target pixmap size (default: original SVG size). * @return the new pixmap. */ 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. * @param size the new size. * @param frameWidthPct the frame size, as percentage of width. * @return the transformed pixmap. * This one is currently unused. */ UIDLLEXPORT QPixmap createRoundedImage( const QPixmap& avatar, const QSize& size, float frameWidthPct = 0.20f ); /** * @brief unmarginLayout recursively walks the QLayout tree and removes all margins. * @param layout the layout to unmargin. */ 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. * @param layout the layout to clear. */ 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(); // TODO:3.3:This has one consumer, move to BlankViewStep UIDLLEXPORT QFont largeFont(); UIDLLEXPORT QSize defaultIconSize(); /** * @brief Size constants for the main Calamares window. */ constexpr int windowMinimumWidth = 800; constexpr int windowMinimumHeight = 520; constexpr int windowPreferredWidth = 1024; constexpr int windowPreferredHeight = 520; } // namespace CalamaresUtils #endif // CALAMARESUTILSGUI_H calamares-3.2.41.1/src/libcalamaresui/utils/ImageRegistry.cpp000066400000000000000000000067331410275732300240700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2019, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "ImageRegistry.h" #include #include #include static QHash< QString, QHash< int, QHash< qint64, QPixmap > > > s_cache; ImageRegistry* ImageRegistry::instance() { static ImageRegistry* s_instance = new ImageRegistry(); return s_instance; } ImageRegistry::ImageRegistry() {} QIcon ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode ) { return pixmap( image, CalamaresUtils::defaultIconSize(), mode ); } qint64 ImageRegistry::cacheKey( const QSize& size ) { return size.width() * 100 + size.height() * 10; } QPixmap 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 ) { return QPixmap(); } QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; if ( s_cache.contains( image ) ) { subcache = s_cache.value( image ); if ( subcache.contains( mode ) ) { subsubcache = subcache.value( mode ); const qint64 ck = cacheKey( size ); if ( subsubcache.contains( ck ) ) { return subsubcache.value( ck ); } } } // Image not found in cache. Let's load it. QPixmap pixmap; if ( image.toLower().endsWith( ".svg" ) ) { QSvgRenderer svgRenderer( image ); QPixmap p( size.isNull() || size.height() == 0 || size.width() == 0 ? svgRenderer.defaultSize() : size ); p.fill( Qt::transparent ); QPainter pixPainter( &p ); svgRenderer.render( &pixPainter ); pixPainter.end(); pixmap = p; } else { pixmap = QPixmap( image ); } if ( !pixmap.isNull() ) { if ( mode == CalamaresUtils::RoundedCorners ) { pixmap = CalamaresUtils::createRoundedImage( pixmap, size ); } if ( !size.isNull() && pixmap.size() != size ) { if ( size.width() == 0 ) { pixmap = pixmap.scaledToHeight( size.height(), Qt::SmoothTransformation ); } else if ( size.height() == 0 ) { pixmap = pixmap.scaledToWidth( size.width(), Qt::SmoothTransformation ); } else { pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } } putInCache( image, size, mode, pixmap ); } return pixmap; } void ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, const QPixmap& pixmap ) { QHash< qint64, QPixmap > subsubcache; QHash< int, QHash< qint64, QPixmap > > subcache; if ( s_cache.contains( image ) ) { subcache = s_cache.value( image ); if ( subcache.contains( mode ) ) { subsubcache = subcache.value( mode ); } } subsubcache.insert( cacheKey( size ), pixmap ); subcache.insert( mode, subsubcache ); s_cache.insert( image, subcache ); } calamares-3.2.41.1/src/libcalamaresui/utils/ImageRegistry.h000066400000000000000000000016651410275732300235340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Christian Muehlhaeuser * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef IMAGE_REGISTRY_H #define IMAGE_REGISTRY_H #include #include "DllMacro.h" #include "utils/CalamaresUtilsGui.h" class UIDLLEXPORT ImageRegistry { public: static ImageRegistry* instance(); 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 ); private: qint64 cacheKey( const QSize& size ); void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, const QPixmap& pixmap ); }; #endif // IMAGE_REGISTRY_H calamares-3.2.41.1/src/libcalamaresui/utils/Paste.cpp000066400000000000000000000121731410275732300223640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Bill Auger * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Paste.h" #include "Branding.h" #include "DllMacro.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include #include #include #include using namespace CalamaresUtils::Units; /** @brief Reads the logfile, returns its contents. * * Returns an empty QByteArray() on any kind of error. */ STATICTEST QByteArray logFileContents( const qint64 sizeLimitBytes ) { if ( sizeLimitBytes != -1 ) { cDebug() << "Log upload size limit was limited to" << sizeLimitBytes << "bytes"; } const QString name = Logger::logFile(); QFile pasteSourceFile( name ); if ( !pasteSourceFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cWarning() << "Could not open log file" << name; return QByteArray(); } if ( sizeLimitBytes == -1 ) { 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(); 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( serverUrl.host(), serverUrl.port() ); if ( !socket->waitForConnected() ) { cError() << "Could not connect to paste server"; socket->close(); return QString(); } cDebug() << "Connected to paste server" << serverUrl.host(); socket->write( pasteData ); if ( !socket->waitForBytesWritten() ) { cError() << "Could not write to paste server"; socket->close(); return QString(); } cDebug() << Logger::SubEntry << "Paste data written to paste server"; if ( !socket->waitForReadyRead() ) { cError() << "No data from paste server"; socket->close(); return QString(); } cDebug() << Logger::SubEntry << "Reading response from paste server"; QByteArray responseText = socket->readLine( 1024 ); socket->close(); 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(); } } QString CalamaresUtils::Paste::doLogUpload( QObject* parent ) { auto [ type, serverUrl, sizeLimitBytes ] = Calamares::Branding::instance()->uploadServer(); if ( !serverUrl.isValid() ) { cWarning() << "Upload configure with invalid URL"; return QString(); } if ( type == Calamares::Branding::UploadServerType::None ) { // Early return to avoid reading the log file 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::critical( nullptr, QCoreApplication::translate( "Calamares::ViewManager", "Install Log Paste URL" ), pasteUrlMessage ); return pasteUrl; } bool CalamaresUtils::Paste::isEnabled() { auto [ type, serverUrl, sizeLimitBytes ] = Calamares::Branding::instance()->uploadServer(); return type != Calamares::Branding::UploadServerType::None; } calamares-3.2.41.1/src/libcalamaresui/utils/Paste.h000066400000000000000000000016111410275732300220240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Bill Auger * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef UTILS_PASTE_H #define UTILS_PASTE_H #include class QObject; 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 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 #endif calamares-3.2.41.1/src/libcalamaresui/utils/PythonQtUtils.cpp000066400000000000000000000017451410275732300241220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonQtUtils.h" namespace CalamaresUtils { QVariant lookupAndCall( PyObject* object, const QStringList& candidateNames, const QVariantList& args, const QVariantMap& kwargs ) { Q_ASSERT( object ); Q_ASSERT( !candidateNames.isEmpty() ); for ( const QString& name : candidateNames ) { PythonQtObjectPtr callable = PythonQt::self()->lookupCallable( object, name ); if ( callable ) { return callable.call( args, kwargs ); } } // If we haven't found a callable with the given names, we force an error: return PythonQt::self()->call( object, candidateNames.first(), args, kwargs ); } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamaresui/utils/PythonQtUtils.h000066400000000000000000000014151410275732300235610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PYTHONQTUTILS_H #define PYTHONQTUTILS_H #include #include namespace CalamaresUtils { //NOTE: when running this, it is assumed that Python is initialized and // PythonQt::self() is valid. QVariant lookupAndCall( PyObject* object, const QStringList& candidateNames, const QVariantList& args = QVariantList(), const QVariantMap& kwargs = QVariantMap() ); } // namespace CalamaresUtils #endif // PYTHONQTUTILS_H calamares-3.2.41.1/src/libcalamaresui/utils/Qml.cpp000066400000000000000000000164251410275732300220450ustar00rootroot00000000000000/* === 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 "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 #include #include #include #include static QDir s_qmlModulesDir( QString( CMAKE_INSTALL_FULL_DATADIR ) + "/qml" ); namespace CalamaresUtils { QDir qmlModulesDir() { return s_qmlModulesDir; } void 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( "()" ); if ( qmlObject && qmlObject->metaObject()->indexOfMethod( methodSignature ) >= 0 ) { QVariant returnValue; QMetaObject::invokeMethod( qmlObject, method, Q_RETURN_ARG( QVariant, returnValue ) ); if ( !returnValue.isNull() ) { cDebug() << "QML" << methodSignature << "returned" << returnValue; } } else if ( qmlObject ) { cDebug() << "QML" << methodSignature << "is missing."; } } /** @brief Appends to @p candidates suitable expansions of @p names * * Depending on @p method, adds search expansions for branding, or QRC, * or both (with branding having precedence). */ static void addExpansions( QmlSearch method, QStringList& candidates, const QStringList& names ) { QString bPath( QStringLiteral( "%1/%2.qml" ) ); QString qrPath( QStringLiteral( ":/%1.qml" ) ); if ( ( method == QmlSearch::Both ) || ( method == QmlSearch::BrandingOnly ) ) { QString brandDir = Calamares::Branding::instance()->componentDirectory(); std::transform( names.constBegin(), names.constEnd(), std::back_inserter( candidates ), [&]( 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 ); } ); } } /** @brief Does actual search and returns result. * * Empty items in @p candidates are ignored. */ static QString searchQmlFile( QmlSearch method, const QString& configuredName, const QStringList& hints ) { QStringList candidates; if ( configuredName.startsWith( '/' ) ) { candidates << configuredName; } addExpansions( method, candidates, hints ); for ( const QString& candidate : candidates ) { if ( candidate.isEmpty() ) { continue; } cDebug() << Logger::SubEntry << "Looking at QML file" << candidate; if ( QFile::exists( candidate ) ) { if ( candidate.startsWith( ':' ) ) { // Inconsistency: QFile only sees the file with :, // but QML needs an explicit scheme (of qrc:) return QStringLiteral( "qrc" ) + candidate; } return candidate; } } cDebug() << Logger::SubEntry << "None found."; return QString(); } QString searchQmlFile( QmlSearch method, const QString& configuredName, const Calamares::ModuleSystem::InstanceKey& i ) { cDebug() << "Looking for QML for" << i.toString(); return searchQmlFile( method, configuredName, { configuredName, i.toString(), i.module() } ); } QString searchQmlFile( QmlSearch method, const QString& configuredName ) { cDebug() << "Looking for QML for" << configuredName; return searchQmlFile( method, configuredName, { configuredName } ); } const NamedEnumTable< QmlSearch >& qmlSearchNames() { // *INDENT-OFF* // clang-format off static NamedEnumTable< QmlSearch > names { { QStringLiteral( "both" ), QmlSearch::Both }, { QStringLiteral( "qrc" ), QmlSearch::QrcOnly }, { QStringLiteral( "branding" ), QmlSearch::BrandingOnly } }; // *INDENT-ON* // clang-format on return names; } void registerQmlModels() { static bool done = false; if ( !done ) { done = true; // 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::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(); } ); } } } // namespace CalamaresUtils calamares-3.2.41.1/src/libcalamaresui/utils/Qml.h000066400000000000000000000056621410275732300215130ustar00rootroot00000000000000/* === 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_QML_H #define UTILS_QML_H #include "DllMacro.h" #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 * models (Branding, ViewManager, ...) available to QML. * * 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 registerQmlModels(); /** @brief Calls the QML method @p method on @p qmlObject * * Pass in only the name of the method (e.g. onActivate). This function * checks if the method exists (with no arguments) before trying to * call it, so that no warnings are printed due to missing methods. * * 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 ); /** @brief Search modes for loading Qml files. * * A QML file could be compiled into QRC, or it could live * in the branding directory (and, in debug-runs, in * the current-directory). Modules have some control * over where the search is done. */ enum class QmlSearch { QrcOnly, BrandingOnly, Both }; /// @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 * * Returns QString() if nothing is found (which would mean the module * is badly configured). */ UIDLLEXPORT QString searchQmlFile( QmlSearch method, const QString& configuredName, const Calamares::ModuleSystem::InstanceKey& i ); UIDLLEXPORT QString searchQmlFile( QmlSearch method, const QString& fileNameNoSuffix ); } // namespace CalamaresUtils #endif calamares-3.2.41.1/src/libcalamaresui/utils/QtCompat.h000066400000000000000000000022071410275732300225020ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamaresui/utils/TestPaste.cpp000066400000000000000000000042631410275732300232250ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/libcalamaresui/viewpages/000077500000000000000000000000001410275732300214325ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamaresui/viewpages/BlankViewStep.cpp000066400000000000000000000040221410275732300246520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "BlankViewStep.h" #include "utils/CalamaresUtilsGui.h" #include #include #include namespace Calamares { BlankViewStep::BlankViewStep( const QString& title, const QString& description, const QString& details, QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new QWidget() ) { QBoxLayout* layout = new QVBoxLayout(); constexpr int const marginWidth = 10; constexpr int const spacingHeight = 10; auto* label = new QLabel( title ); label->setAlignment( Qt::AlignHCenter ); label->setFont( CalamaresUtils::largeFont() ); layout->addWidget( label ); label = new QLabel( description ); label->setWordWrap( true ); label->setMargin( marginWidth ); layout->addSpacing( spacingHeight ); layout->addWidget( label ); if ( !details.isEmpty() ) { label = new QLabel( details ); label->setMargin( marginWidth ); layout->addSpacing( spacingHeight ); layout->addWidget( label ); } layout->addStretch( 1 ); // Push the rest to the top m_widget->setLayout( layout ); } BlankViewStep::~BlankViewStep() {} QString BlankViewStep::prettyName() const { return tr( "Blank Page" ); } void BlankViewStep::back() { } void BlankViewStep::next() { } bool BlankViewStep::isBackEnabled() const { return false; } bool BlankViewStep::isNextEnabled() const { return false; } bool BlankViewStep::isAtBeginning() const { return true; } bool BlankViewStep::isAtEnd() const { return false; } QWidget* BlankViewStep::widget() { return m_widget; } Calamares::JobList BlankViewStep::jobs() const { return JobList(); } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/viewpages/BlankViewStep.h000066400000000000000000000024661410275732300243310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef BLANKVIEWSTEP_H #define BLANKVIEWSTEP_H #include "viewpages/ViewStep.h" namespace Calamares { /** @brief A "blank" view step, used for error and status reporting * * This view step never allows navigation (forward or back); it's a trap. * It displays a title and explanation, and optional details. */ class BlankViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit BlankViewStep( const QString& title, const QString& description, const QString& details = QString(), QObject* parent = nullptr ); ~BlankViewStep() override; QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; private: QWidget* m_widget; }; } // namespace Calamares #endif // BLANKVIEWSTEP_H calamares-3.2.41.1/src/libcalamaresui/viewpages/ExecutionViewStep.cpp000066400000000000000000000114021410275732300255660ustar00rootroot00000000000000/* === 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 "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/Retranslator.h" #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 { ExecutionViewStep::ExecutionViewStep( QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget ) , m_progressBar( new QProgressBar ) , m_label( new QLabel ) , m_slideshow( makeSlideshow( m_widget ) ) { m_widget->setObjectName( "slideshow" ); m_progressBar->setObjectName( "exec-progress" ); m_label->setObjectName( "exec-message" ); QVBoxLayout* layout = new QVBoxLayout( m_widget ); QVBoxLayout* innerLayout = new QVBoxLayout; m_progressBar->setMaximum( 10000 ); layout->addWidget( m_slideshow->widget() ); CalamaresUtils::unmarginLayout( layout ); layout->addLayout( innerLayout ); innerLayout->addSpacing( CalamaresUtils::defaultFontHeight() / 2 ); innerLayout->addWidget( m_progressBar ); innerLayout->addWidget( m_label ); connect( JobQueue::instance(), &JobQueue::progress, this, &ExecutionViewStep::updateFromJobQueue ); } QString ExecutionViewStep::prettyName() const { return Calamares::Settings::instance()->isSetupMode() ? tr( "Set up" ) : tr( "Install" ); } QWidget* ExecutionViewStep::widget() { return m_widget; } void ExecutionViewStep::next() { } void ExecutionViewStep::back() { } bool ExecutionViewStep::isNextEnabled() const { return false; } bool ExecutionViewStep::isBackEnabled() const { return false; } bool ExecutionViewStep::isAtBeginning() const { return true; } bool ExecutionViewStep::isAtEnd() const { return !JobQueue::instance()->isRunning(); } void ExecutionViewStep::onActivate() { m_slideshow->changeSlideShowState( Slideshow::Start ); const auto instanceDescriptors = Calamares::Settings::instance()->moduleInstances(); JobQueue* queue = JobQueue::instance(); 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(); if ( module->isEmergency() ) { for ( auto& j : jl ) { j->setEmergency( true ); } } queue->enqueue( weight, jl ); } } queue->start(); } JobList ExecutionViewStep::jobs() const { return JobList(); } void ExecutionViewStep::appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ) { m_jobInstanceKeys.append( instanceKey ); } void ExecutionViewStep::updateFromJobQueue( qreal percent, const QString& message ) { m_progressBar->setValue( int( percent * m_progressBar->maximum() ) ); if ( !message.isEmpty() ) { m_label->setText( message ); } } void ExecutionViewStep::onLeave() { m_slideshow->changeSlideShowState( Slideshow::Stop ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/viewpages/ExecutionViewStep.h000066400000000000000000000026771410275732300252510ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef EXECUTIONVIEWSTEP_H #define EXECUTIONVIEWSTEP_H #include "ViewStep.h" #include "modulesystem/InstanceKey.h" #include class QLabel; class QObject; class QProgressBar; namespace Calamares { class Slideshow; class ExecutionViewStep : public ViewStep { Q_OBJECT public: explicit ExecutionViewStep( QObject* parent = nullptr ); QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; JobList jobs() const override; void appendJobModuleInstanceKey( const ModuleSystem::InstanceKey& instanceKey ); private: QWidget* m_widget; QProgressBar* m_progressBar; QLabel* m_label; Slideshow* m_slideshow; QList< ModuleSystem::InstanceKey > m_jobInstanceKeys; void updateFromJobQueue( qreal percent, const QString& message ); }; } // namespace Calamares #endif /* EXECUTIONVIEWSTEP_H */ calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.cpp000066400000000000000000000016721410275732300277410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonQtGlobalStorageWrapper.h" #include "GlobalStorage.h" GlobalStorage::GlobalStorage( Calamares::GlobalStorage* gs ) : QObject( gs ) , m_gs( gs ) { } bool GlobalStorage::contains( const QString& key ) const { return m_gs->contains( key ); } int GlobalStorage::count() const { return m_gs->count(); } void GlobalStorage::insert( const QString& key, const QVariant& value ) { m_gs->insert( key, value ); } QStringList GlobalStorage::keys() const { return m_gs->keys(); } int GlobalStorage::remove( const QString& key ) { return m_gs->remove( key ); } QVariant GlobalStorage::value( const QString& key ) const { return m_gs->value( key ); } calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtGlobalStorageWrapper.h000066400000000000000000000023001410275732300273730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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 PYTHONQTGLOBALSTORAGEWRAPPER_H #define PYTHONQTGLOBALSTORAGEWRAPPER_H #include #include #include namespace Calamares { class GlobalStorage; } /** * @brief This GlobalStorage class is a namespace-free wrapper for * Calamares::GlobalStorage. This is unfortunately a necessity * because PythonQt doesn't like namespaces. */ class GlobalStorage : public QObject { Q_OBJECT public: explicit GlobalStorage( Calamares::GlobalStorage* gs ); virtual ~GlobalStorage() {} public slots: bool contains( const QString& key ) const; int count() const; void insert( const QString& key, const QVariant& value ); QStringList keys() const; int remove( const QString& key ); QVariant value( const QString& key ) const; private: Calamares::GlobalStorage* m_gs; }; #endif // PYTHONQTGLOBALSTORAGEWRAPPER_H calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtJob.cpp000066400000000000000000000027641410275732300243700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonQtJob.h" #include "utils/PythonQtUtils.h" PythonQtJob::PythonQtJob( PythonQtObjectPtr cxt, PythonQtObjectPtr pyJob, QObject* parent ) : Calamares::Job( parent ) , m_cxt( cxt ) , m_pyJob( pyJob ) { } QString PythonQtJob::prettyName() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyName", "prettyname", "pretty_name" } ).toString(); } QString PythonQtJob::prettyDescription() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyDescription", "prettydescription", "pretty_description" } ) .toString(); } QString PythonQtJob::prettyStatusMessage() const { return CalamaresUtils::lookupAndCall( m_pyJob, { "prettyStatusMessage", "prettystatusmessage", "pretty_status_message" } ) .toString(); } Calamares::JobResult PythonQtJob::exec() { QVariant response = m_pyJob.call( "exec" ); if ( response.isNull() ) { return Calamares::JobResult::ok(); } QVariantMap map = response.toMap(); if ( map.isEmpty() || map.value( "ok" ).toBool() ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( map.value( "message" ).toString(), map.value( "details" ).toString() ); } calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtJob.h000066400000000000000000000023761410275732300240340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PYTHONQTJOB_H #define PYTHONQTJOB_H #include "Job.h" #include namespace Calamares { class PythonQtViewStep; } class PythonQtJobResult : public QObject, public Calamares::JobResult { Q_OBJECT public: explicit PythonQtJobResult( bool ok, const QString& message, const QString& details ) : QObject( nullptr ) , Calamares::JobResult( message, details, ok ? 0 : Calamares::JobResult::GenericError ) { } }; class PythonQtJob : public Calamares::Job { Q_OBJECT public: virtual ~PythonQtJob() {} QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: explicit PythonQtJob( PythonQtObjectPtr cxt, PythonQtObjectPtr pyJob, QObject* parent = nullptr ); friend class Calamares::PythonQtViewStep; // only this one can call the ctor PythonQtObjectPtr m_cxt; PythonQtObjectPtr m_pyJob; }; #endif // PYTHONQTJOB_H calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.cpp000066400000000000000000000061531410275732300263130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PythonQtUtilsWrapper.h" #include "partition/Mount.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/String.h" #include Utils::Utils( QObject* parent ) : QObject( parent ) , m_exceptionCxt( PythonQt::self()->createUniqueModule() ) { PythonQt::self()->evalScript( m_exceptionCxt, "import subprocess" ); } void Utils::debug( const QString& s ) const { cDebug() << "PythonQt DBG>" << s; } int Utils::mount( const QString& device_path, const QString& mount_point, const QString& filesystem_name, const QString& options ) const { return CalamaresUtils::Partition::mount( device_path, mount_point, filesystem_name, options ); } int Utils::target_env_call( const QString& command, const QString& stdin, int timeout ) const { return CalamaresUtils::System::instance()->targetEnvCall( command, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); } int Utils::target_env_call( const QStringList& args, const QString& stdin, int timeout ) const { return CalamaresUtils::System::instance()->targetEnvCall( args, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); } int Utils::check_target_env_call( const QString& command, const QString& stdin, int timeout ) const { int ec = target_env_call( command, stdin, timeout ); return _handle_check_target_env_call_error( ec, command ); } int Utils::check_target_env_call( const QStringList& args, const QString& stdin, int timeout ) const { int ec = target_env_call( args, stdin, timeout ); return _handle_check_target_env_call_error( ec, args.join( ' ' ) ); } QString Utils::check_target_env_output( const QString& command, const QString& stdin, int timeout ) const { QString output; int ec = CalamaresUtils::System::instance()->targetEnvOutput( command, output, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); _handle_check_target_env_call_error( ec, command ); return output; } QString Utils::check_target_env_output( const QStringList& args, const QString& stdin, int timeout ) const { QString output; int ec = CalamaresUtils::System::instance()->targetEnvOutput( args, output, QString(), stdin, std::chrono::seconds( timeout > 0 ? timeout : 0 ) ); _handle_check_target_env_call_error( ec, args.join( ' ' ) ); return output; } QString Utils::obscure( const QString& string ) const { return CalamaresUtils::obscure( string ); } int Utils::_handle_check_target_env_call_error( int ec, const QString& cmd ) const { if ( ec ) { QString raise = QString( "raise subprocess.CalledProcessError(%1,\"%2\")" ).arg( ec ).arg( cmd ); PythonQt::self()->evalScript( m_exceptionCxt, raise ); } return ec; } calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtUtilsWrapper.h000066400000000000000000000033721410275732300257600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PYTHONQTUTILSWRAPPER_H #define PYTHONQTUTILSWRAPPER_H #include #include /** * @brief The Utils class wraps around functions from CalamaresUtils to make them * available in the PythonQt interface. */ class Utils : public QObject { Q_OBJECT public: explicit Utils( QObject* parent = nullptr ); virtual ~Utils() {} public slots: void debug( const QString& s ) const; int mount( const QString& device_path, const QString& mount_point, const QString& filesystem_name, const QString& options ) const; int target_env_call( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; int target_env_call( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; int check_target_env_call( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; int check_target_env_call( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; QString check_target_env_output( const QString& command, const QString& stdin = QString(), int timeout = 0 ) const; QString check_target_env_output( const QStringList& args, const QString& stdin = QString(), int timeout = 0 ) const; QString obscure( const QString& string ) const; private: inline int _handle_check_target_env_call_error( int ec, const QString& cmd ) const; PythonQtObjectPtr m_exceptionCxt; }; #endif // PYTHONQTUTILSWRAPPER_H calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtViewStep.cpp000066400000000000000000000122231410275732300254130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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 "PythonQtViewStep.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/PythonQtUtils.h" #include "utils/Retranslator.h" #include "viewpages/PythonQtJob.h" #include #include #include namespace Calamares { PythonQtViewStep::PythonQtViewStep( PythonQtObjectPtr cxt, QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget() ) , m_cxt( cxt ) { PythonQt* pq = PythonQt::self(); Q_ASSERT( pq ); // The @calamares_module decorator should have filled _calamares_module_typename // for us. QString className = m_cxt.getVariable( "_calamares_module_typename" ).toString(); // Instantiate an object of the class marked with @calamares_module and // store it as _calamares_module. pq->evalScript( m_cxt, QString( "_calamares_module = %1()" ).arg( className ) ); m_obj = pq->lookupObject( m_cxt, "_calamares_module" ); Q_ASSERT( !m_obj.isNull() ); // no entry point, no party // Prepare the base widget for the module's pages m_widget->setLayout( new QVBoxLayout ); CalamaresUtils::unmarginLayout( m_widget->layout() ); m_cxt.addObject( "_calamares_module_basewidget", m_widget ); CALAMARES_RETRANSLATE_FOR( m_widget, CalamaresUtils::lookupAndCall( m_obj, { "retranslate" }, { CalamaresUtils::translatorLocaleName() } ); ) } QString PythonQtViewStep::prettyName() const { return CalamaresUtils::lookupAndCall( m_obj, { "prettyName", "prettyname", "pretty_name" } ).toString(); } QWidget* PythonQtViewStep::widget() { if ( m_widget->layout()->count() > 1 ) cWarning() << "PythonQtViewStep wrapper widget has more than 1 child. " "This should never happen."; bool nothingChanged = m_cxt.evalScript( "_calamares_module.widget() in _calamares_module_basewidget.children()" ).toBool(); if ( nothingChanged ) { return m_widget; } // Else, we either don't have a child widget, or we have a child widget that // was previously set and doesn't apply any more since the Python module // set a new one. // First we clear the layout, which should only ever have 1 item. // We only remove from the layout and not delete because Python is in charge // of memory management for these widgets. while ( m_widget->layout()->itemAt( 0 ) ) { m_widget->layout()->takeAt( 0 ); } m_cxt.evalScript( "_calamares_module_basewidget.layout().addWidget(_calamares_module.widget())" ); return m_widget; } void PythonQtViewStep::next() { CalamaresUtils::lookupAndCall( m_obj, { "next" } ); } void PythonQtViewStep::back() { CalamaresUtils::lookupAndCall( m_obj, { "back" } ); } bool PythonQtViewStep::isNextEnabled() const { return CalamaresUtils::lookupAndCall( m_obj, { "isNextEnabled", "isnextenabled", "is_next_enabled" } ).toBool(); } bool PythonQtViewStep::isBackEnabled() const { return CalamaresUtils::lookupAndCall( m_obj, { "isBackEnabled", "isbackenabled", "is_back_enabled" } ).toBool(); } bool PythonQtViewStep::isAtBeginning() const { return CalamaresUtils::lookupAndCall( m_obj, { "isAtBeginning", "isatbeginning", "is_at_beginning" } ).toBool(); } bool PythonQtViewStep::isAtEnd() const { return CalamaresUtils::lookupAndCall( m_obj, { "isAtEnd", "isatend", "is_at_end" } ).toBool(); } void PythonQtViewStep::onActivate() { CalamaresUtils::lookupAndCall( m_obj, { "onActivate", "onactivate", "on_activate" } ); } void PythonQtViewStep::onLeave() { CalamaresUtils::lookupAndCall( m_obj, { "onLeave", "onleave", "on_leave" } ); } JobList PythonQtViewStep::jobs() const { JobList jobs; PythonQtObjectPtr jobsCallable = PythonQt::self()->lookupCallable( m_obj, "jobs" ); if ( jobsCallable.isNull() ) { return jobs; } PythonQtObjectPtr response = PythonQt::self()->callAndReturnPyObject( jobsCallable ); if ( response.isNull() ) { return jobs; } PythonQtObjectPtr listPopCallable = PythonQt::self()->lookupCallable( response, "pop" ); if ( listPopCallable.isNull() ) { return jobs; } forever { PythonQtObjectPtr aJob = PythonQt::self()->callAndReturnPyObject( listPopCallable, { 0 } ); if ( aJob.isNull() ) { break; } jobs.append( Calamares::job_ptr( new PythonQtJob( m_cxt, aJob ) ) ); } return jobs; } void PythonQtViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_obj.addVariable( "configuration", configurationMap ); } QWidget* PythonQtViewStep::createScriptingConsole() { PythonQtScriptingConsole* console = new PythonQtScriptingConsole( nullptr, m_cxt ); console->setProperty( "classname", m_cxt.getVariable( "_calamares_module_typename" ).toString() ); return console; } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/viewpages/PythonQtViewStep.h000066400000000000000000000022551410275732300250640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PYTHONQTVIEWSTEP_H #define PYTHONQTVIEWSTEP_H #include "ViewStep.h" #include namespace Calamares { class PythonQtViewStep : public Calamares::ViewStep { Q_OBJECT public: PythonQtViewStep( PythonQtObjectPtr cxt, QObject* parent = nullptr ); QString prettyName() const override; QWidget* widget() override; void next() override; void back() override; void onLeave() override; void onActivate() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QWidget* createScriptingConsole(); protected: QWidget* m_widget; private: PythonQtObjectPtr m_cxt; PythonQtObjectPtr m_obj; }; } // namespace Calamares #endif // PYTHONQTVIEWSTEP_H calamares-3.2.41.1/src/libcalamaresui/viewpages/QmlViewStep.cpp000066400000000000000000000157121410275732300243640ustar00rootroot00000000000000/* === 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 "QmlViewStep.h" #include "Branding.h" #include "ViewManager.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Qml.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" #include #include #include #include #include #include #include /// @brief State-change of the QML, for changeQMLState() enum class QMLAction { Start, Stop }; /** @brief Tells the QML we activated or left it. * * If @p action is @c QMLAction::Start, calls onActivate in the QML. * If @p action is @c QMLAction::Stop, calls onLeave in the QML. * * Sets *activatedInCalamares* property on the QML as well (to true * if @p action is @c QMLAction::Start, false otherwise). */ static void changeQMLState( QMLAction action, QQuickItem* item ) { static const char propertyName[] = "activatedInCalamares"; bool activate = action == QMLAction::Start; CalamaresUtils::callQmlFunction( item, activate ? "onActivate" : "onLeave" ); auto property = item->property( propertyName ); if ( property.isValid() && ( property.type() == QVariant::Bool ) && ( property.toBool() != activate ) ) { item->setProperty( propertyName, activate ); } } namespace Calamares { QmlViewStep::QmlViewStep( QObject* parent ) : ViewStep( parent ) , m_widget( new QWidget ) , m_spinner( new WaitingWidget( tr( "Loading ..." ) ) ) , m_qmlWidget( new QQuickWidget ) { CalamaresUtils::registerQmlModels(); QVBoxLayout* layout = new QVBoxLayout( m_widget ); layout->addWidget( m_spinner ); m_qmlWidget->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); m_qmlWidget->setResizeMode( QQuickWidget::SizeRootObjectToView ); m_qmlWidget->engine()->addImportPath( CalamaresUtils::qmlModulesDir().absolutePath() ); // QML Loading starts when the configuration for the module is set. } QmlViewStep::~QmlViewStep() {} QString QmlViewStep::prettyName() const { // TODO: query the QML itself return tr( "QML Step %1." ).arg( moduleInstanceKey().module() ); } bool QmlViewStep::isAtBeginning() const { return true; } bool QmlViewStep::isAtEnd() const { return true; } bool QmlViewStep::isBackEnabled() const { return true; } bool QmlViewStep::isNextEnabled() const { return true; } Calamares::JobList QmlViewStep::jobs() const { return JobList(); } void QmlViewStep::onActivate() { if ( m_qmlObject ) { changeQMLState( QMLAction::Start, m_qmlObject ); } } void QmlViewStep::onLeave() { if ( m_qmlObject ) { changeQMLState( QMLAction::Stop, m_qmlObject ); } } QWidget* 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() { cDebug() << "QML component" << m_qmlFileName << m_qmlComponent->status(); if ( m_qmlComponent->status() == QQmlComponent::Error ) { showFailedQml(); } if ( m_qmlComponent->isReady() && !m_qmlObject ) { cDebug() << Logger::SubEntry << "QML component complete" << m_qmlFileName << "creating object"; // Don't do this again disconnect( m_qmlComponent, &QQmlComponent::statusChanged, this, &QmlViewStep::loadComplete ); QObject* o = m_qmlComponent->create(); m_qmlObject = qobject_cast< QQuickItem* >( o ); if ( !m_qmlObject ) { cError() << Logger::SubEntry << "Could not create QML from" << m_qmlFileName; delete o; } else { // 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_qmlWidget->setContent( QUrl( m_qmlFileName ), m_qmlComponent, m_qmlObject ); showQml(); } } } void QmlViewStep::showQml() { if ( !m_qmlWidget || !m_qmlObject ) { cWarning() << "showQml() called but no QML object"; return; } if ( m_spinner ) { m_widget->layout()->removeWidget( m_spinner ); m_widget->layout()->addWidget( m_qmlWidget ); delete m_spinner; m_spinner = nullptr; } else { cWarning() << "showQml() called twice"; } if ( ViewManager::instance()->currentStep() == this ) { // We're alreay visible! Must have been slow QML loading, and we // passed onActivate already. changeQMLState( QMLAction::Start, m_qmlObject ); } } void QmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { bool ok = false; m_searchMethod = CalamaresUtils::qmlSearchNames().find( CalamaresUtils::getString( configurationMap, "qmlSearch" ), ok ); if ( !ok ) { cWarning() << "Bad QML search mode set for" << moduleInstanceKey(); } QString qmlFile = CalamaresUtils::getString( configurationMap, "qmlFilename" ); if ( !m_qmlComponent ) { m_qmlFileName = searchQmlFile( m_searchMethod, qmlFile, moduleInstanceKey() ); QObject* config = this->getConfig(); if ( config ) { setContextProperty( "config", config ); } cDebug() << "QmlViewStep" << moduleInstanceKey() << "loading" << m_qmlFileName; m_qmlComponent = new QQmlComponent( m_qmlWidget->engine(), QUrl( m_qmlFileName ), QQmlComponent::CompilationMode::Asynchronous ); connect( m_qmlComponent, &QQmlComponent::statusChanged, this, &QmlViewStep::loadComplete ); if ( m_qmlComponent->status() == QQmlComponent::Error ) { showFailedQml(); } } else { cWarning() << "QML configuration set after component" << moduleInstanceKey() << "has loaded."; } } void QmlViewStep::showFailedQml() { cWarning() << "QmlViewStep" << moduleInstanceKey() << "loading failed."; if ( m_qmlComponent ) { cDebug() << Logger::SubEntry << "QML error:" << m_qmlComponent->errorString(); } m_spinner->setText( prettyName() + ' ' + tr( "Loading failed." ) ); } QObject* QmlViewStep::getConfig() { return nullptr; } void QmlViewStep::setContextProperty( const char* name, QObject* property ) { m_qmlWidget->engine()->rootContext()->setContextProperty( name, property ); } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/viewpages/QmlViewStep.h000066400000000000000000000070461410275732300240320ustar00rootroot00000000000000/* === 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 QMLVIEWSTEP_H #define QMLVIEWSTEP_H #include "utils/Qml.h" #include "viewpages/ViewStep.h" class QQmlComponent; class QQuickItem; class QQuickWidget; class WaitingWidget; namespace Calamares { /** @brief A viewstep that uses QML for the UI * * 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 { Q_OBJECT public: /** @brief Creates a QML view step * * The search behavior for the actial QML depends on a QmlSearch value. * This is set through common configuration key *qmlSearch*. * The filename used comes from the module identifier, or can be * set in the configuration file through *qmlFilename*. * * @see Qml.h for available Calamares internals. */ QmlViewStep( QObject* parent = nullptr ); ~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; virtual bool isAtBeginning() const override; virtual bool isAtEnd() const override; virtual void onActivate() override; virtual void onLeave() override; /// @brief QML widgets don't produce jobs by default virtual JobList jobs() const override; /// @brief Configure search paths; subclasses should call this at the **end** of their own implementation virtual void setConfigurationMap( const QVariantMap& configurationMap ) override; protected: /** @brief Gets a pointer to the Config of this view step * * Parts of the configuration of the viewstep can be passed to QML * by placing them in a QObject (as properties). The default * implementation returns nullptr, for no-config. * * Ownership of the config object remains with the ViewStep; it is possible * to return a pointer to a member variable. * * This object is made available as a context-property *config* in QML. */ virtual QObject* getConfig(); /** @brief Adds a context property for this QML file * * Does not take ownership. */ void setContextProperty( const char* name, QObject* property ); private Q_SLOTS: void loadComplete(); private: /// @brief Swap out the spinner for the QQuickWidget void showQml(); /// @brief Show error message in spinner. void showFailedQml(); /// @brief Controls where m_name is searched CalamaresUtils::QmlSearch m_searchMethod; QString m_name; QString m_qmlFileName; QWidget* m_widget = nullptr; WaitingWidget* m_spinner = nullptr; QQuickWidget* m_qmlWidget = nullptr; QQmlComponent* m_qmlComponent = nullptr; QQuickItem* m_qmlObject = nullptr; }; } // namespace Calamares #endif calamares-3.2.41.1/src/libcalamaresui/viewpages/Slideshow.cpp000066400000000000000000000174501410275732300241060ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamaresui/viewpages/Slideshow.h000066400000000000000000000072611410275732300235520ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamaresui/viewpages/ViewStep.cpp000066400000000000000000000025751410275732300237150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ViewStep.h" #include #include namespace Calamares { ViewStep::ViewStep( QObject* parent ) : QObject( parent ) { } ViewStep::~ViewStep() {} QString ViewStep::prettyStatus() const { return QString(); } QWidget* ViewStep::createSummaryWidget() const { return nullptr; } void ViewStep::onActivate() { } void ViewStep::onLeave() { } void ViewStep::next() { } void ViewStep::back() { } void ViewStep::setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ) { m_instanceKey = instanceKey; } void ViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { Q_UNUSED( configurationMap ) } RequirementsList 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 calamares-3.2.41.1/src/libcalamaresui/viewpages/ViewStep.h000066400000000000000000000156401410275732300233570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef VIEWSTEP_H #define VIEWSTEP_H #include "DllMacro.h" #include "Job.h" #include "modulesystem/InstanceKey.h" #include "modulesystem/Requirement.h" #include #include #include namespace Calamares { /** * @brief The ViewStep class is the base class for all view modules. * A view module is a Calamares module which has at least one UI page (exposed as * ViewStep::widget), and can optionally create Calamares jobs at runtime. * As of early 2020, a view module can be implemented by deriving from ViewStep * in C++ (as a Qt Plugin or a Qml ViewStep) or in Python with the PythonQt interface * (which also mimics the ViewStep class). * * A ViewStep can describe itself in human-readable format for the SummaryPage * (which shows all of the things which have been collected to be done in the * next exec-step) through prettyStatus() and createSummaryWidget(). */ class UIDLLEXPORT ViewStep : public QObject { Q_OBJECT public: explicit ViewStep( QObject* parent = nullptr ); ~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; /** @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 * * Multi-page view steps need to manage the content visible in the widget * themselves. This method is called when the user clicks the *next* * button, and should switch to the next of the multiple-pages. It needs * to be consistent with both isNextEnabled() and isAtEnd(). * * In particular: when isAtEnd() returns false, next() is called when * the user clicks the button and a new page should be shown by this * view step. When isAtEnd() returns true, clicking the button will * switch to the next view step in sequence, rather than a next page * in the current view step. */ virtual void next(); /// @brief Multi-page support, go back virtual void back(); /// @brief Can the user click *next* with currently-filled-in data? virtual bool isNextEnabled() const = 0; /// @brief Can the user click *previous* with currently-filled-in data? virtual bool isBackEnabled() const = 0; /** * @brief Multi-page support, switch to previous view step? * * For a multi-page view step, this indicates that the first (beginning) * page is showing. Clicking *previous* when at the beginning of a view * step, switches to the previous step, not the previous page of the * current view step. */ virtual bool isAtBeginning() const = 0; /// @brief Multi-page support, switch to next view step? virtual bool isAtEnd() const = 0; /** * @brief onActivate called every time a ViewStep is shown, either by going forward * or backward. * The default implementation does nothing. */ virtual void onActivate(); /** * @brief onLeave called every time a ViewStep is hidden and control passes to * another ViewStep, either by going forward or backward. * The default implementation does nothing. */ virtual void onLeave(); /** * @brief Jobs needed to run this viewstep * * When a ViewStep is listed in the exec section, its jobs are executed instead. * This function returns that list of jobs; an empty list is ok. */ virtual JobList jobs() const = 0; void setModuleInstanceKey( const Calamares::ModuleSystem::InstanceKey& instanceKey ); Calamares::ModuleSystem::InstanceKey moduleInstanceKey() const { return m_instanceKey; } virtual void setConfigurationMap( const QVariantMap& configurationMap ); /** * @brief Can this module proceed, on this machine? * * This is called asynchronously at startup, and returns a list of * the requirements that the module has checked, and their status. * See Calamares::RequirementEntry for details. */ virtual RequirementsList checkRequirements(); signals: /// @brief Tells the viewmanager to enable the *next* button according to @p status void nextStatusChanged( bool status ); /* Emitted when the viewstep thinks it needs more space than is currently * available for display. @p size is the requested space, that is needed * to display the entire page. * * This request may be silently ignored. */ void ensureSize( QSize enlarge ) const; protected: Calamares::ModuleSystem::InstanceKey m_instanceKey; }; using ViewStepList = QList< ViewStep* >; } // namespace Calamares #endif // VIEWSTEP_H calamares-3.2.41.1/src/libcalamaresui/widgets/000077500000000000000000000000001410275732300211065ustar00rootroot00000000000000calamares-3.2.41.1/src/libcalamaresui/widgets/ClickableLabel.cpp000066400000000000000000000016511410275732300244260ustar00rootroot00000000000000/* === 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. * */ #include "ClickableLabel.h" #include // for doubleClickInterval() namespace Calamares { ClickableLabel::ClickableLabel( QWidget* parent ) : QLabel( parent ) { } ClickableLabel::ClickableLabel( const QString& text, QWidget* parent ) : QLabel( text, parent ) { } ClickableLabel::~ClickableLabel() {} void ClickableLabel::mousePressEvent( QMouseEvent* event ) { QLabel::mousePressEvent( event ); m_time.start(); } void ClickableLabel::mouseReleaseEvent( QMouseEvent* event ) { QLabel::mouseReleaseEvent( event ); if ( m_time.elapsed() < qApp->doubleClickInterval() ) { emit clicked(); } } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/widgets/ClickableLabel.h000066400000000000000000000025221410275732300240710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LIBCALAMARESUI_CLICKABLELABEL_H #define LIBCALAMARESUI_CLICKABLELABEL_H #include #include #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 ); ~ClickableLabel() override; signals: void clicked(); protected: virtual void mousePressEvent( QMouseEvent* event ) override; virtual void mouseReleaseEvent( QMouseEvent* event ) override; private: QElapsedTimer m_time; }; } // namespace Calamares #endif // LIBCALAMARESUI_CLICKABLELABEL_H calamares-3.2.41.1/src/libcalamaresui/widgets/FixedAspectRatioLabel.cpp000066400000000000000000000016211410275732300257500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "FixedAspectRatioLabel.h" FixedAspectRatioLabel::FixedAspectRatioLabel( QWidget* parent ) : QLabel( parent ) { } FixedAspectRatioLabel::~FixedAspectRatioLabel() {} void FixedAspectRatioLabel::setPixmap( const QPixmap& pixmap ) { m_pixmap = pixmap; QLabel::setPixmap( pixmap.scaled( contentsRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); } void FixedAspectRatioLabel::resizeEvent( QResizeEvent* event ) { Q_UNUSED( event ) QLabel::setPixmap( m_pixmap.scaled( contentsRect().size(), Qt::KeepAspectRatio, Qt::SmoothTransformation ) ); } calamares-3.2.41.1/src/libcalamaresui/widgets/FixedAspectRatioLabel.h000066400000000000000000000014161410275732300254170ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef FIXEDASPECTRATIOLABEL_H #define FIXEDASPECTRATIOLABEL_H #include #include class FixedAspectRatioLabel : public QLabel { Q_OBJECT public: explicit FixedAspectRatioLabel( QWidget* parent = nullptr ); ~FixedAspectRatioLabel() override; public slots: void setPixmap( const QPixmap& pixmap ); void resizeEvent( QResizeEvent* event ) override; private: QPixmap m_pixmap; }; #endif // FIXEDASPECTRATIOLABEL_H calamares-3.2.41.1/src/libcalamaresui/widgets/PrettyRadioButton.cpp000066400000000000000000000050361410275732300252600ustar00rootroot00000000000000/* === 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. * */ #include "PrettyRadioButton.h" #include "utils/CalamaresUtilsGui.h" #include "widgets/ClickableLabel.h" #include #include #include #include #include namespace Calamares { PrettyRadioButton::PrettyRadioButton( QWidget* parent ) : QWidget( parent ) , m_label( new ClickableLabel ) , m_radio( new QRadioButton ) , m_mainLayout( new QGridLayout ) , m_optionsLayout( nullptr ) { setLayout( m_mainLayout ); m_label->setBuddy( m_radio ); m_label->setWordWrap( true ); m_label->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_mainLayout->addWidget( m_radio, 0, 0 ); 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 ); } void PrettyRadioButton::setText( const QString& text ) { m_label->setText( text ); } void PrettyRadioButton::setIconSize( const QSize& size ) { m_radio->setIconSize( size ); } void PrettyRadioButton::setIcon( const QIcon& icon ) { m_radio->setIcon( icon ); } QSize PrettyRadioButton::iconSize() const { return m_radio->iconSize(); } void PrettyRadioButton::setChecked( bool checked ) { 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 ) { QWidget* w = new QWidget; m_optionsLayout = new QHBoxLayout; m_optionsLayout->setAlignment( Qt::AlignmentFlag::AlignLeft ); m_optionsLayout->addStretch( 1 ); w->setLayout( m_optionsLayout ); m_mainLayout->addWidget( w, 1, 1 ); toggleOptions( m_radio->isChecked() ); } m_optionsLayout->insertWidget( m_optionsLayout->count() - 1, box ); } void PrettyRadioButton::toggleOptions( bool toggle ) { if ( m_optionsLayout ) { m_optionsLayout->parentWidget()->setVisible( toggle ); } } } // namespace Calamares calamares-3.2.41.1/src/libcalamaresui/widgets/PrettyRadioButton.h000066400000000000000000000042041410275732300247210ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/libcalamaresui/widgets/WaitingWidget.cpp000066400000000000000000000030131410275732300243550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "WaitingWidget.h" #include "utils/CalamaresUtilsGui.h" #include "3rdparty/waitingspinnerwidget.h" #include #include WaitingWidget::WaitingWidget( const QString& text, QWidget* parent ) : QWidget( parent ) { QBoxLayout* waitingLayout = new QVBoxLayout; setLayout( waitingLayout ); waitingLayout->addStretch(); QBoxLayout* pbLayout = new QHBoxLayout; waitingLayout->addLayout( pbLayout ); pbLayout->addStretch(); WaitingSpinnerWidget* spnr = new WaitingSpinnerWidget(); pbLayout->addWidget( spnr ); pbLayout->addStretch(); m_waitingLabel = new QLabel( text ); int spnrSize = m_waitingLabel->fontMetrics().height() * 4; spnr->setFixedSize( spnrSize, spnrSize ); spnr->setInnerRadius( spnrSize / 2 ); spnr->setLineLength( spnrSize / 2 ); spnr->setLineWidth( spnrSize / 8 ); spnr->start(); m_waitingLabel->setAlignment( Qt::AlignCenter ); waitingLayout->addSpacing( spnrSize / 2 ); waitingLayout->addWidget( m_waitingLabel ); waitingLayout->addStretch(); CalamaresUtils::unmarginLayout( waitingLayout ); } void WaitingWidget::setText( const QString& text ) { m_waitingLabel->setText( text ); } calamares-3.2.41.1/src/libcalamaresui/widgets/WaitingWidget.h000066400000000000000000000011151410275732300240230ustar00rootroot00000000000000/* === 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 WAITINGWIDGET_H #define WAITINGWIDGET_H #include class QLabel; class WaitingWidget : public QWidget { Q_OBJECT public: explicit WaitingWidget( const QString& text, QWidget* parent = nullptr ); void setText( const QString& text ); private: QLabel* m_waitingLabel; }; #endif // WAITINGWIDGET_H calamares-3.2.41.1/src/modules/000077500000000000000000000000001410275732300161335ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/CMakeLists.txt000066400000000000000000000032571410275732300207020ustar00rootroot00000000000000# === 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 # in this list. set( LIST_SKIPPED_MODULES "" ) include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_BINARY_DIR}/src/libcalamares ${CMAKE_SOURCE_DIR}/src/libcalamaresui ) string( REPLACE " " ";" SKIP_LIST "${SKIP_MODULES}" ) file( GLOB SUBDIRECTORIES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" ) list( SORT SUBDIRECTORIES ) foreach( SUBDIRECTORY ${SUBDIRECTORIES} ) calamares_add_module_subdirectory( ${SUBDIRECTORY} LIST_SKIPPED_MODULES ) endforeach() # 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() calamares-3.2.41.1/src/modules/README.md000066400000000000000000000323461410275732300174220ustar00rootroot00000000000000# 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". 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 use C++ and QWidgets or QML * jobmodule, for not-user-visible modules. These may be done in C++, Python, or as external processes. A viewmodule exposes a UI to the user. There are three **interfaces** for Calamares modules: * qtplugin (viewmodules, jobmodules), * python (jobmodules only), * process (jobmodules only, not recommended). ## Module directory Each Calamares module lives in its own directory. The contents of the directory depend on the interface and type of the module. ### Module descriptor A Calamares module must have a *module descriptor file*, named `module.desc`. For C++ (qtplugin) modules using CMake as a build- system and using the calamares_add_plugin() function -- this is the 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 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 of the module's directory. Module descriptors **must** have the following keys: - *name* (an identifier; must be the same as the directory name) - *type* ("job" or "view") - *interface* (see below for the different interfaces; generally we refer to the kinds of modules by their interface) 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) Module descriptors **may** have the following keys: - *emergency* (a boolean value, set to true to mark the module as an emergency module) - *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 A module may list zero (if it has no requirements) or more modules by name. As modules are loaded from the global sequence in `settings.conf`, each module is checked that all of the modules it requires are already loaded before it. This ensures that if a module needs another one to fill in globalstorage keys, that happens before 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 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`. 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-specific configuration A Calamares module **may** read a module configuration file, 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. 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 the default value is false) if there is no configuration file, a warning is printed during Calamares start-up. The sample configuration files may work and may be suitable for your distribution, but no guarantee is given about their stability beyond syntactic correctness. The module configuration file, if it exists, is a YAML 1.2 document which contains a YAML map of anything. All sample module configuration files are installed in `$DESTDIR/share/calamares/modules` but can be overridden by 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 on 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. ## C++ modules > Type: viewmodule, jobmodule > Interface: qtplugin Currently the recommended way to write a module which exposes one or more installer pages (viewmodule) is through a C++ and Qt plugin. Viewmodules must implement `Calamares::ViewStep`. They can also implement `Calamares::Job` to provide jobs. To add a Qt plugin module, put it in a subdirectory and make sure it has 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 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. Calamares offers a Python API for module developers, the core Calamares functionality is exposed as `libcalamares.job` for job data, `libcalamares.globalstorage` for shared data and `libcalamares.utils` for generic utility functions. Documentation is inline. 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. 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 > Type: jobmodule > Interface: python A Python jobmodule is a Python program which imports libcalamares and has a function `run()` as entry point. The function `run()` must return `None` if everything went well, or a tuple `(str,str)` with an error message and description if something went wrong. ### Python API **TODO:** this needs documentation ## PythonQt modules (deprecated) > Type: viewmodule, jobmodule > Interface: pythonqt The PythonQt modules are deprecated and will be removed in Calamares 3.3. Their documentation is also almost completely lacking. ## Process modules Use of this kind of module is **not** recommended. > Type: jobmodule > Interface: process A process jobmodule runs a (single) command. The interface is *process*, while the module type must be *job* or *jobmodule*. 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). ## 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. calamares-3.2.41.1/src/modules/bootloader/000077500000000000000000000000001410275732300202655ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/bootloader/bootloader.conf000066400000000000000000000043631410275732300232740ustar00rootroot00000000000000# 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). --- # Define which bootloader you want to use for EFI installations # Possible options are 'grub', 'sb-shim' and 'systemd-boot'. efiBootLoader: "grub" # systemd-boot configuration files settings, set kernel and initramfs file names # and amount of time before default selection boots kernel: "/vmlinuz-linux" img: "/initramfs-linux.img" fallback: "/initramfs-linux-fallback.img" timeout: "10" # Optionally set the menu entry name and kernel name to use in systemd-boot. # If not specified here, these settings will be taken from branding.desc. # # bootloaderEntryName: "Generic GNU/Linux" # kernelLine: ", with Stable-Kernel" # fallbackKernelLine: ", with Stable-Kernel (fallback initramfs)" # GRUB 2 binary names and boot directory # Some distributions (e.g. Fedora) use grub2-* (resp. /boot/grub2/) names. # These names are also used when using sb-shim, since that needs some # GRUB functionality (notably grub-probe) to work. As needed, you may use # complete paths like `/usr/bin/efibootmgr` for the executables. # grubInstall: "grub-install" grubMkconfig: "grub-mkconfig" grubCfg: "/boot/grub/grub.cfg" grubProbe: "grub-probe" efiBootMgr: "efibootmgr" # Optionally set the bootloader ID to use for EFI. This is passed to # grub-install --bootloader-id. # # If not set here, the value from bootloaderEntryName from branding.desc # is used, with problematic characters (space and slash) replaced. # # The ID is also used as a directory name within the EFI environment, # and the bootloader is copied from /boot/efi/EFI// . When # setting the option here, keep in mind that the name is sanitized # (problematic characters, see above, are replaced). # # efiBootloaderId: "dirname" # Optionally install a copy of the GRUB EFI bootloader as the EFI # fallback loader (either bootia32.efi or bootx64.efi depending on # the system). This may be needed on certain systems (Intel DH87MC # seems to be the only one). If you set this to false, take care # to add another module to optionally install the fallback on those # boards that need it. installEFIFallback: true calamares-3.2.41.1/src/modules/bootloader/bootloader.schema.yaml000066400000000000000000000016451410275732300245500ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/bootloader/main.py000066400000000000000000000440161410275732300215700ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import os import shutil import subprocess import libcalamares from libcalamares.utils import check_target_env_call import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext # This is the sanitizer used all over to tidy up filenames # to make identifiers (or to clean up names to make filenames). file_name_sanitizer = str.maketrans(" /()", "_-__") def pretty_name(): return _("Install bootloader.") def get_uuid(): """ Checks and passes 'uuid' to other routine. :return: """ partitions = libcalamares.globalstorage.value("partitions") for partition in partitions: if partition["mountPoint"] == "/": libcalamares.utils.debug("Root partition uuid: \"{!s}\"".format(partition["uuid"])) return partition["uuid"] return "" def get_bootloader_entry_name(): """ Passes 'bootloader_entry_name' to other routine based on configuration file. :return: """ if "bootloaderEntryName" in libcalamares.job.configuration: return libcalamares.job.configuration["bootloaderEntryName"] else: branding = libcalamares.globalstorage.value("branding") return branding["bootloaderEntryName"] def get_kernel_line(kernel_type): """ Passes 'kernel_line' to other routine based on configuration file. :param kernel_type: :return: """ if kernel_type == "fallback": if "fallbackKernelLine" in libcalamares.job.configuration: return libcalamares.job.configuration["fallbackKernelLine"] else: return " (fallback)" else: if "kernelLine" in libcalamares.job.configuration: return libcalamares.job.configuration["kernelLine"] else: return "" def create_systemd_boot_conf(install_path, efi_dir, uuid, entry, entry_name, kernel_type): """ Creates systemd-boot configuration files based on given parameters. :param install_path: :param efi_dir: :param uuid: :param entry: :param entry_name: :param kernel_type: """ kernel = libcalamares.job.configuration["kernel"] kernel_params = ["quiet"] partitions = libcalamares.globalstorage.value("partitions") swap_uuid = "" swap_outer_mappername = None cryptdevice_params = [] # Take over swap settings: # - unencrypted swap partition sets swap_uuid # - encrypted root sets cryptdevice_params for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if (partition["fs"] == "linuxswap" and has_luks): swap_outer_mappername = partition["luksMapperName"] if partition["mountPoint"] == "/" and has_luks: cryptdevice_params = ["cryptdevice=UUID=" + partition["luksUuid"] + ":" + partition["luksMapperName"], "root=/dev/mapper/" + partition["luksMapperName"]] if cryptdevice_params: kernel_params.extend(cryptdevice_params) else: kernel_params.append("root=UUID={!s}".format(uuid)) if swap_uuid: kernel_params.append("resume=UUID={!s}".format(swap_uuid)) if swap_outer_mappername: kernel_params.append("resume=/dev/mapper/{!s}".format( swap_outer_mappername)) kernel_line = get_kernel_line(kernel_type) libcalamares.utils.debug("Configure: \"{!s}\"".format(kernel_line)) if kernel_type == "fallback": img = libcalamares.job.configuration["fallback"] entry_name = entry_name + "-fallback" else: img = libcalamares.job.configuration["img"] conf_path = os.path.join(install_path + efi_dir, "loader", "entries", entry_name + ".conf") # 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) kernel_path = install_path + kernel kernel_name = os.path.basename(kernel_path) shutil.copyfile(kernel_path, os.path.join(files_dir, kernel_name)) img_path = install_path + img img_name = os.path.basename(img_path) shutil.copyfile(img_path, os.path.join(files_dir, img_name)) lines = [ '## This is just an example config file.\n', '## Please edit the paths and kernel parameters according\n', '## to your system.\n', '\n', "title {!s}{!s}\n".format(entry, kernel_line), "linux {!s}\n".format(os.path.join("/", entry_name, kernel_name)), "initrd {!s}\n".format(os.path.join("/", entry_name, img_name)), "options {!s} rw\n".format(" ".join(kernel_params)), ] with open(conf_path, 'w') as conf_file: for line in lines: conf_file.write(line) def create_loader(loader_path, entry): """ Writes configuration for loader. :param loader_path: :param entry: """ timeout = libcalamares.job.configuration["timeout"] lines = [ "timeout {!s}\n".format(timeout), "default {!s}\n".format(entry), ] with open(loader_path, 'w') as loader_file: for line in lines: loader_file.write(line) def efi_label(): if "efiBootloaderId" in libcalamares.job.configuration: efi_bootloader_id = libcalamares.job.configuration[ "efiBootloaderId"] else: branding = libcalamares.globalstorage.value("branding") efi_bootloader_id = branding["bootloaderEntryName"] return efi_bootloader_id.translate(file_name_sanitizer) def efi_word_size(): # get bitness of the underlying UEFI try: sysfile = open("/sys/firmware/efi/fw_platform_size", "r") efi_bitness = sysfile.read(2) except Exception: # if the kernel is older than 4.0, the UEFI bitness likely isn't # exposed to the userspace so we assume a 64 bit UEFI here efi_bitness = "64" 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. :param efi_directory: """ libcalamares.utils.debug("Bootloader: systemd-boot") install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory uuid = get_uuid() distribution = get_bootloader_entry_name() distribution_translated = distribution.translate(file_name_sanitizer) loader_path = os.path.join(install_efi_directory, "loader", "loader.conf") subprocess.call(["bootctl", "--path={!s}".format(install_efi_directory), "install"]) create_systemd_boot_conf(install_path, efi_directory, uuid, distribution, distribution_translated, "default") if "fallback" in libcalamares.job.configuration: create_systemd_boot_conf(install_path, efi_directory, uuid, distribution, distribution_translated, "fallback") 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": # 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 install_grub(efi_directory, fw_type): """ Installs grub as bootloader, either in pc or efi mode. :param efi_directory: :param fw_type: """ if fw_type == "efi": libcalamares.utils.debug("Bootloader: grub (efi)") install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory if not os.path.isdir(install_efi_directory): os.makedirs(install_efi_directory) efi_bootloader_id = efi_label() 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"]) # VFAT is weird, see issue CAL-385 install_efi_directory_firmware = (vfat_correct_case( install_efi_directory, "EFI")) if not os.path.exists(install_efi_directory_firmware): os.makedirs(install_efi_directory_firmware) # there might be several values for the boot directory # most usual they are boot, Boot, BOOT install_efi_boot_directory = (vfat_correct_case( install_efi_directory_firmware, "boot")) if not os.path.exists(install_efi_boot_directory): 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): 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) shutil.copy2(efi_file_source, efi_file_target) else: libcalamares.utils.debug("Bootloader: grub (bios)") if libcalamares.globalstorage.value("bootLoader") is None: return 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"]]) def install_secureboot(efi_directory): """ Installs the secureboot shim in the system by calling efibootmgr. """ efi_bootloader_id = efi_label() install_path = libcalamares.globalstorage.value("rootMountPoint") install_efi_directory = install_path + efi_directory if efi_word_size() == "64": 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, # while *drive* may return "(disk/dev/sda,gpt1)" .. # we're interested in the numbers in the second part # of that tuple. efi_drive = subprocess.check_output([ libcalamares.job.configuration["grubProbe"], "-t", "drive", "--device-map=", install_efi_directory]).decode("ascii") efi_disk = subprocess.check_output([ libcalamares.job.configuration["grubProbe"], "-t", "disk", "--device-map=", install_efi_directory]).decode("ascii") efi_drive_partition = efi_drive.replace("(","").replace(")","").split(",")[1] # Get the first run of digits from the partition efi_partition_number = None c = 0 start = None while c < len(efi_drive_partition): if efi_drive_partition[c].isdigit() and start is None: start = c if not efi_drive_partition[c].isdigit() and start is not None: efi_partition_number = efi_drive_partition[start:c] break c += 1 if efi_partition_number is None: raise ValueError("No partition number found for %s" % install_efi_directory) subprocess.call([ libcalamares.job.configuration["efiBootMgr"], "-c", "-w", "-L", efi_bootloader_id, "-d", efi_disk, "-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"], "-o", os.path.join(efi_directory, "EFI", efi_bootloader_id, "grub.cfg")]) def vfat_correct_case(parent, name): for candidate in os.listdir(parent): if name.lower() == candidate.lower(): return os.path.join(parent, candidate) return os.path.join(parent, name) def prepare_bootloader(fw_type): """ Prepares bootloader. Based on value 'efi_boot_loader', it either calls systemd-boot or grub to be installed. :param fw_type: :return: """ efi_boot_loader = libcalamares.job.configuration["efiBootLoader"] efi_directory = libcalamares.globalstorage.value("efiSystemPartition") if efi_boot_loader == "systemd-boot" and fw_type == "efi": install_systemd_boot(efi_directory) elif efi_boot_loader == "sb-shim" and fw_type == "efi": install_secureboot(efi_directory) elif efi_boot_loader == "grub" or fw_type != "efi": install_grub(efi_directory, fw_type) else: libcalamares.utils.debug( "WARNING: the combination of " "boot-loader '{!s}' and firmware '{!s}' " "is not supported.".format(efi_boot_loader, fw_type) ) def run(): """ Starts procedure and passes 'fw_type' to other routine. :return: """ fw_type = libcalamares.globalstorage.value("firmwareType") if (libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi"): libcalamares.utils.warning( "Non-EFI system, and no bootloader is set." ) return None partitions = libcalamares.globalstorage.value("partitions") if fw_type == "efi": efi_system_partition = libcalamares.globalstorage.value("efiSystemPartition") esp_found = [ p for p in partitions if p["mountPoint"] == efi_system_partition ] if not esp_found: libcalamares.utils.warning( "EFI system, but nothing mounted on {!s}".format(efi_system_partition) ) return None 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 calamares-3.2.41.1/src/modules/bootloader/module.desc000066400000000000000000000004461410275732300224160ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" interface: "python" name: "bootloader" script: "main.py" # The partition module sets up the EFI firmware type # global key, which is used to decide how to install. requiredModules: [ "partition" ] calamares-3.2.41.1/src/modules/bootloader/test.yaml000066400000000000000000000002621410275732300221300ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount bootLoader: installPath: /dev/sdb branding: shortProductName: "Generic Distro" calamares-3.2.41.1/src/modules/contextualprocess/000077500000000000000000000000001410275732300217205ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/contextualprocess/Binding.h000066400000000000000000000044641410275732300234530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /* This file isn't public API, but is used to express the API that * the tests for ContextualProcess can work with. */ #ifndef CONTEXTUALPROCESSJOB_BINDING_H #define CONTEXTUALPROCESSJOB_BINDING_H #include "Job.h" #include #include #include namespace CalamaresUtils { class CommandList; } namespace Calamares { class GlobalStorage; } struct ValueCheck : public QPair< QString, CalamaresUtils::CommandList* > { ValueCheck( const QString& value, CalamaresUtils::CommandList* commands ) : QPair< QString, CalamaresUtils::CommandList* >( value, commands ) { } // ~ValueCheck() // // There is no destructor. // // We don't own the commandlist, the binding holding this valuecheck // does, so don't delete. This is closely tied to (temporaries created // by) pass-by-value in QList::append(). QString value() const { return first; } CalamaresUtils::CommandList* commands() const { return second; } }; class ContextualProcessBinding { public: ContextualProcessBinding( const QString& varname ) : m_variable( varname ) { } ~ContextualProcessBinding(); QString variable() const { return m_variable; } int count() const { return m_checks.count(); } /** * @brief add commands to be executed when @p value is matched. * * Ownership of the CommandList passes to this binding. */ void append( const QString& value, CalamaresUtils::CommandList* commands ); ///@brief The bound variable has @p value , run the associated commands. Calamares::JobResult run( const QString& value ) const; /** @brief Tries to obtain this binding's value from GS * * Stores the value in @p value and returns true if a value * was found (e.g. @p storage contains the variable this binding * is for) and false otherwise. */ bool fetch( Calamares::GlobalStorage* storage, QString& value ) const; private: QString m_variable; QList< ValueCheck > m_checks; CalamaresUtils::CommandList* m_wildcard = nullptr; }; #endif calamares-3.2.41.1/src/modules/contextualprocess/CMakeLists.txt000066400000000000000000000007741410275732300244700ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares_add_test( contextualprocesstest SOURCES Tests.cpp ContextualProcessJob.cpp # Builds it a second time LIBRARIES yamlcpp::yamlcpp ) calamares-3.2.41.1/src/modules/contextualprocess/ContextualProcessJob.cpp000066400000000000000000000122331410275732300265450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ContextualProcessJob.h" #include "Binding.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Variant.h" ContextualProcessBinding::~ContextualProcessBinding() { m_wildcard = nullptr; for ( const auto& c : m_checks ) { delete c.commands(); } } void ContextualProcessBinding::append( const QString& value, CalamaresUtils::CommandList* commands ) { m_checks.append( ValueCheck( value, commands ) ); if ( value == QString( "*" ) ) { m_wildcard = commands; } } Calamares::JobResult ContextualProcessBinding::run( const QString& value ) const { for ( const auto& c : m_checks ) { if ( value == c.value() ) { return c.commands()->run(); } } if ( m_wildcard ) { return m_wildcard->run(); } return Calamares::JobResult::ok(); } ///@brief Implementation of fetch() for recursively looking up dotted selector parts. static bool fetch( QString& value, QStringList& selector, int index, const QVariant& v ) { if ( !v.canConvert( QMetaType::QVariantMap ) ) { return false; } const QVariantMap map = v.toMap(); const QString& key = selector.at( index ); if ( index == selector.length() - 1 ) { value = map.value( key ).toString(); return map.contains( key ); } else { return fetch( value, selector, index + 1, map.value( key ) ); } } bool ContextualProcessBinding::fetch( Calamares::GlobalStorage* storage, QString& value ) const { value.clear(); if ( !storage ) { return false; } if ( m_variable.contains( '.' ) ) { QStringList steps = m_variable.split( '.' ); return ::fetch( value, steps, 1, storage->value( steps.first() ) ); } else { value = storage->value( m_variable ).toString(); return storage->contains( m_variable ); } } ContextualProcessJob::ContextualProcessJob( QObject* parent ) : Calamares::CppJob( parent ) { } ContextualProcessJob::~ContextualProcessJob() { qDeleteAll( m_commands ); } QString ContextualProcessJob::prettyName() const { return tr( "Contextual Processes Job" ); } Calamares::JobResult ContextualProcessJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); for ( const ContextualProcessBinding* binding : m_commands ) { QString value; if ( binding->fetch( gs, value ) ) { Calamares::JobResult r = binding->run( value ); if ( !r ) { return r; } } else { cWarning() << "ContextualProcess checks for unknown variable" << binding->variable(); } } return Calamares::JobResult::ok(); } void ContextualProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { bool dontChroot = CalamaresUtils::getBool( configurationMap, "dontChroot", false ); qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 10 ); if ( timeout < 1 ) { timeout = 10; } for ( QVariantMap::const_iterator iter = configurationMap.cbegin(); iter != configurationMap.cend(); ++iter ) { QString variableName = iter.key(); if ( variableName.isEmpty() || ( variableName == "dontChroot" ) || ( variableName == "timeout" ) ) { continue; } if ( iter.value().type() != QVariant::Map ) { cWarning() << moduleInstanceKey() << "bad configuration values for" << variableName; continue; } auto binding = new ContextualProcessBinding( variableName ); m_commands.append( binding ); QVariantMap values = iter.value().toMap(); for ( QVariantMap::const_iterator valueiter = values.cbegin(); valueiter != values.cend(); ++valueiter ) { QString valueString = valueiter.key(); if ( variableName.isEmpty() ) { cWarning() << moduleInstanceKey() << "variable" << variableName << "unrecognized value" << valueiter.key(); continue; } CalamaresUtils::CommandList* commands = new CalamaresUtils::CommandList( valueiter.value(), !dontChroot, std::chrono::seconds( timeout ) ); binding->append( valueString, commands ); } } } int ContextualProcessJob::count() { return m_commands.count(); } int ContextualProcessJob::count( const QString& variableName ) { for ( const ContextualProcessBinding* binding : m_commands ) { if ( binding->variable() == variableName ) { return binding->count(); } } return -1; } CALAMARES_PLUGIN_FACTORY_DEFINITION( ContextualProcessJobFactory, registerPlugin< ContextualProcessJob >(); ) calamares-3.2.41.1/src/modules/contextualprocess/ContextualProcessJob.h000066400000000000000000000022511410275732300262110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CONTEXTUALPROCESSJOB_H #define CONTEXTUALPROCESSJOB_H #include #include #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" class ContextualProcessBinding; class PLUGINDLLEXPORT ContextualProcessJob : public Calamares::CppJob { Q_OBJECT public: explicit ContextualProcessJob( QObject* parent = nullptr ); ~ContextualProcessJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /// The number of bindings int count(); /// The number of value-checks for the named binding (-1 if binding doesn't exist) int count( const QString& variableName ); private: QList< ContextualProcessBinding* > m_commands; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ContextualProcessJobFactory ) #endif // CONTEXTUALPROCESSJOB_H calamares-3.2.41.1/src/modules/contextualprocess/Tests.cpp000066400000000000000000000126061410275732300235330ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Tests.h" #include "Binding.h" #include "ContextualProcessJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( ContextualProcessTests ) using CommandList = CalamaresUtils::CommandList; ContextualProcessTests::ContextualProcessTests() {} ContextualProcessTests::~ContextualProcessTests() {} void ContextualProcessTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); // 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 ); } void ContextualProcessTests::testProcessListSampleConfig() { YAML::Node doc; QStringList dirs { "src/modules/contextualprocess", "." }; for ( const auto& dir : dirs ) { QString filename = dir + "/contextualprocess.conf"; if ( QFileInfo::exists( filename ) ) { doc = YAML::LoadFile( filename.toStdString() ); break; } } ContextualProcessJob job; job.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc ) ); QCOMPARE( job.count(), 2 ); // Only "firmwareType" and "branding.shortVersion" QCOMPARE( job.count( "firmwareType" ), 4 ); QCOMPARE( job.count( "branding.shortVersion" ), 2 ); // in the example config } void ContextualProcessTests::testFetch() { Logger::setupLogLevel( Logger::LOGVERBOSE ); QVariantMap m; // Some keys without sub-map m.insert( QStringLiteral( "carrot" ), true ); m.insert( QStringLiteral( "tomato" ), QStringLiteral( "fruit" ) ); // A key with sub-map { QVariantMap names; names.insert( QStringLiteral( "blackcurrant" ), QStringLiteral( "black" ) ); names.insert( QStringLiteral( "redcurrant" ), QStringLiteral( "red" ) ); names.insert( QStringLiteral( "knoebels" ), QStringLiteral( "green" ) ); names.insert( QStringLiteral( "strawberry" ), QStringLiteral( "red" ) ); m.insert( QStringLiteral( "berries" ), names ); } // Another key with sub-map { QVariantMap names; names.insert( QStringLiteral( "ext4" ), 1 ); names.insert( QStringLiteral( "zfs" ), 2 ); names.insert( QStringLiteral( "swap" ), 2 ); m.insert( QStringLiteral( "filesystem_use" ), names ); } QCOMPARE( m.count(), 4 ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance() ? Calamares::JobQueue::instance()->globalStorage() : nullptr; QVERIFY( gs ); // Copy the built-up-map into GS for ( auto it = m.cbegin(); it != m.cend(); ++it ) { gs->insert( it.key(), it.value() ); } // Testing of fetch() { ContextualProcessBinding b( QStringLiteral( "carrot" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "true" ) ); // String representation of boolean true } { ContextualProcessBinding b( QStringLiteral( "tomato" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "fruit" ) ); } { // Key not found ContextualProcessBinding b( QStringLiteral( "parsnip" ) ); QString s = QStringLiteral( "white" ); QVERIFY( !b.fetch( gs, s ) ); QCOMPARE( s, QString() ); QVERIFY( s.isEmpty() ); } { // Submap gets smashed ContextualProcessBinding b( QStringLiteral( "berries" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QVERIFY( s.isEmpty() ); // No string representation } { // Compound lookup ContextualProcessBinding b( QStringLiteral( "berries.strawberry" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "red" ) ); } { ContextualProcessBinding b( QStringLiteral( "berries.knoebels" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "green" ) ); } { ContextualProcessBinding b( QStringLiteral( "filesystem_use.ext4" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "1" ) ); } { ContextualProcessBinding b( QStringLiteral( "filesystem_use.zfs" ) ); QString s; QVERIFY( b.fetch( gs, s ) ); QCOMPARE( s, QStringLiteral( "2" ) ); } { // Key not found, compound ContextualProcessBinding b( QStringLiteral( "filesystem_use.ufs" ) ); QString s = QStringLiteral( "ufs" ); QVERIFY( !b.fetch( gs, s ) ); QCOMPARE( s, QString() ); QVERIFY( s.isEmpty() ); } } calamares-3.2.41.1/src/modules/contextualprocess/Tests.h000066400000000000000000000012251410275732300231730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef TESTS_H #define TESTS_H #include class ContextualProcessTests : public QObject { Q_OBJECT public: ContextualProcessTests(); ~ContextualProcessTests() override; private Q_SLOTS: void initTestCase(); // Check the sample config file is processed correctly void testProcessListSampleConfig(); // Variable binding lookup void testFetch(); }; #endif calamares-3.2.41.1/src/modules/contextualprocess/contextualprocess.conf000066400000000000000000000052311410275732300263550ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration for the contextual process job. # # Contextual processes are based on **global** configuration values. # When a given global value (string) equals a given value, then # the associated command is executed. # # The special top-level keys *dontChroot* and *timeout* have # meaning just like in shellprocess.conf. They are excluded from # the comparison with global variables. # # Configuration consists of keys for global variable names (except # *dontChroot* and *timeout*), and the sub-keys are strings to compare # to the variable's value. If the variable has that particular value, the # corresponding value (script) is executed. # # The variable **may** contain dots, in which case the dot is used # to select into maps inside global storage, e.g. # # - *firmwareType* is a simple global name # - *branding.bootloader* is the *bootloader* value in the *branding* map # # Only a few global storage entries have well-defined sub-maps; # branding is one of them, and *filesystem_use* is another. Note that # variable names with dots **must** be quoted, or you will get a YAML error. # # # You can check for an empty value with "". # # As a special case, the value-check "*" matches any value, but **only** # if no other value-check matches. Use it as an *else* form for value- # checks. Take care to put the asterisk in quotes. The value-check "*" # **also** matches a literal asterisk as value; a confusing corner case # is checking for an asterisk **and** having a wildcard match with # different commands. This is currently not possible. # # Global configuration variables are not checked in a deterministic # order, so do not rely on commands from one variable-check to # always happen before (or after) checks on another # variable. Similarly, the value-equality checks are not # done in a deterministic order, but all of the value-checks # for a given variable happen together. As a special case, the # value-check for "*" (the *else* case) happens after all of the # other value-checks, and only matches if none of the others do. # # The values after a value sub-keys are the same kinds of values # as can be given to the *script* key in the shellprocess module. # See shellprocess.conf for documentation on valid values. --- dontChroot: false firmwareType: efi: - "-pkg remove efi-firmware" - command: "-mkinitramfsrd -abgn" timeout: 120 # This is slow bios: "-pkg remove bios-firmware" "": "/bin/false no-firmware-type-set" "*": "/bin/false some-other-firmware-value" "branding.shortVersion": "2020.2": "/bin/false february" "2019.4": "/bin/true april" calamares-3.2.41.1/src/modules/displaymanager/000077500000000000000000000000001410275732300211335ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/displaymanager/displaymanager.conf000066400000000000000000000042331410275732300250040ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configure one or more display managers (e.g. SDDM) # with a "best effort" approach. # # This module also sets up autologin, if the feature is enabled in # globalstorage (where it would come from the users page). --- # The DM module attempts to set up all the DMs found in this list, in the # precise order listed. The displaymanagers list can also be set in # globalstorage, and in that case it overrides the setting here. # # If *sysconfigSetup* is set to *true* (see below, only relevant for # openSUSE derivatives) then this list is ignored and only sysconfig # is attempted. You can also list "sysconfig" in this list instead. # displaymanagers: - slim - sddm - lightdm - gdm - mdm - lxdm - kdm # Enable the following settings to force a desktop environment # in your displaymanager configuration file. This will attempt # to configure the given DE (without checking if it is installed). # The DM configuration for each potential DM may **or may not** # support configuring a default DE, so the keys are mandatory # but their interpretation is up to the DM configuration. # # Subkeys of *defaultDesktopEnvironment* are (all mandatory): # - *executable* a full path to an executable # - *desktopFile* a .desktop filename # # If this is **not** set, then Calamares will look for installed # DE's and pick the first one it finds that is actually installed. # # If this **is** set, and the *executable* key doesn't point to # an installed file, then the .desktop file's TryExec key is # used instead. # #defaultDesktopEnvironment: # executable: "startkde" # desktopFile: "plasma" #If true, try to ensure that the user, group, /var directory etc. for the #display manager are set up correctly. This is normally done by the distribution #packages, and best left to them. Therefore, it is disabled by default. basicSetup: false # If true, setup autologin for openSUSE. This only makes sense on openSUSE # derivatives or other systems where /etc/sysconfig/displaymanager exists. # # The preferred way to pick sysconfig is to just list it in the # *displaymanagers* list (as the only one). # sysconfigSetup: false calamares-3.2.41.1/src/modules/displaymanager/displaymanager.schema.yaml000066400000000000000000000013721410275732300262610ustar00rootroot00000000000000# 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] 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 } calamares-3.2.41.1/src/modules/displaymanager/main.py000066400000000000000000001071771410275732300224460ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import abc import os import re import libcalamares import configparser 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 class DesktopEnvironment: """ Desktop Environment -- some utility functions for a desktop environment (e.g. finding out if it is installed). This is independent of the *Display Manager*, which is what we're configuring in this module. """ def __init__(self, exec, desktop): self.executable = exec self.desktop_file = desktop def _search_executable(self, root_mount_point, pathname): """ Search for @p pathname within @p root_mount_point . If the pathname is absolute, just check there inside the target, otherwise earch in a sort-of-sensible $PATH. Returns the full (including @p root_mount_point) path to that executable, or None. """ if pathname.startswith("/"): path = [""] else: path = ["/bin/", "/usr/bin/", "/sbin/", "/usr/local/bin/"] for p in path: absolute_path = "{!s}{!s}{!s}".format(root_mount_point, p, pathname) if os.path.exists(absolute_path): return absolute_path return None def _search_tryexec(self, root_mount_point, absolute_desktop_file): """ Check @p absolute_desktop_file for a TryExec line and, if that is found, search for the command (executable pathname) within @p root_mount_point. The .desktop file must live within the target root. Returns the full (including @p root_mount_point) for the executable from TryExec, or None. """ assert absolute_desktop_file.startswith(root_mount_point) with open(absolute_desktop_file, "r") as f: for tryexec_line in [x for x in f.readlines() if x.startswith("TryExec")]: try: key, value = tryexec_line.split("=") if key.strip() == "TryExec": return self._search_executable(root_mount_point, value.strip()) except: pass return None def find_executable(self, root_mount_point): """ Returns the full path of the configured executable within @p root_mount_point, or None if it isn't found. May search in a semi-sensible $PATH. """ return self._search_executable(root_mount_point, self.executable) def find_desktop_file(self, root_mount_point): """ Returns the full path of the .desktop file within @p root_mount_point, or None if it isn't found. Searches both X11 and Wayland sessions. """ x11_sessions = "{!s}/usr/share/xsessions/{!s}.desktop".format(root_mount_point, self.desktop_file) wayland_sessions = "{!s}/usr/share/wayland-sessions/{!s}.desktop".format(root_mount_point, self.desktop_file) for candidate in (x11_sessions, wayland_sessions): if os.path.exists(candidate): return candidate return None def is_installed(self, root_mount_point): """ Check if this environment is installed in the target system at @p root_mount_point. """ desktop_file = self.find_desktop_file(root_mount_point) if desktop_file is None: return False return (self.find_executable(root_mount_point) is not None or self._search_tryexec(root_mount_point, desktop_file) is not None) def update_from_desktop_file(self, root_mount_point): """ Find thie DE in the target system at @p root_mount_point. This can update the *executable* configuration value if the configured executable isn't found but the TryExec line from the .desktop file is. The .desktop file is mandatory for a DE. Returns True if the DE is installed. """ desktop_file = self.find_desktop_file(root_mount_point) if desktop_file is None: return False executable_file = self.find_executable(root_mount_point) if executable_file is not None: # .desktop found and executable as well. return True executable_file = self._search_tryexec(root_mount_point, desktop_file) if executable_file is not None: # Found from the .desktop file, so update own executable config if root_mount_point and executable_file.startswith(root_mount_point): executable_file = executable_file[len(root_mount_point):] if not executable_file: # Somehow chopped down to nothing return False if executable_file[0] != "/": executable_file = "/" + executable_file self.executable = executable_file return True # This is to double-check return self.is_installed(root_mount_point) # This is the list of desktop environments that Calamares looks # for; if no default environment is **explicitly** configured # in the `displaymanager.conf` then the first one from this list # that is found, is used. # # Each DE has a sample executable to look for, and a .desktop filename. # If the executable exists, the DE is assumed to be installed # and to use the given .desktop filename. # # If the .desktop file exists and contains a TryExec line and that # TryExec executable exists (searched in /bin, /usr/bin, /sbin and # /usr/local/bin) then the DE is assumed to be installed # and to use that .desktop filename. desktop_environments = [ DesktopEnvironment('/usr/bin/startplasma-x11', 'plasma'), # KDE Plasma 5.17+ DesktopEnvironment('/usr/bin/startkde', 'plasma'), # KDE Plasma 5 DesktopEnvironment('/usr/bin/startkde', 'kde-plasma'), # KDE Plasma 4 DesktopEnvironment( '/usr/bin/budgie-desktop', 'budgie-desktop' # Budgie v10 ), DesktopEnvironment( '/usr/bin/budgie-session', 'budgie-desktop' # Budgie v8 ), DesktopEnvironment('/usr/bin/gnome-session', 'gnome'), DesktopEnvironment('/usr/bin/cinnamon-session-cinnamon', 'cinnamon'), DesktopEnvironment('/usr/bin/mate-session', 'mate'), DesktopEnvironment('/usr/bin/enlightenment_start', 'enlightenment'), DesktopEnvironment('/usr/bin/lxsession', 'LXDE'), DesktopEnvironment('/usr/bin/startlxde', 'LXDE'), DesktopEnvironment('/usr/bin/lxqt-session', 'lxqt'), DesktopEnvironment('/usr/bin/pekwm', 'pekwm'), DesktopEnvironment('/usr/bin/pantheon-session', 'pantheon'), DesktopEnvironment('/usr/bin/startdde', 'deepin'), 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'), ] def find_desktop_environment(root_mount_point): """ Checks which desktop environment is currently installed. :param root_mount_point: :return: """ libcalamares.utils.debug("Using rootMountPoint {!r}".format(root_mount_point)) for desktop_environment in desktop_environments: if desktop_environment.is_installed(root_mount_point): libcalamares.utils.debug(".. selected DE {!s}".format(desktop_environment.desktop_file)) return desktop_environment return None class DisplayManager(metaclass=abc.ABCMeta): """ Display Manager -- a base class for DM configuration. """ name = None executable = None def __init__(self, root_mount_point): self.root_mount_point = root_mount_point def have_dm(self): """ Is this DM installed in the target system? The default implementation checks for `executable` in the target system. """ if self.executable is None: return False bin_path = "{!s}/usr/bin/{!s}".format(self.root_mount_point, self.executable) sbin_path = "{!s}/usr/sbin/{!s}".format(self.root_mount_point, self.executable) return os.path.exists(bin_path) or os.path.exists(sbin_path) # The four abstract methods below are called in the order listed here. # They must all be implemented by subclasses, but not all of them # actually do something for all DMs. @abc.abstractmethod def basic_setup(self): """ Do basic setup (e.g. users, groups, directory creation) for this DM. """ # Some implementations do nothing @abc.abstractmethod def desktop_environment_setup(self, desktop_environment): """ Configure the given @p desktop_environment as the default one, in the configuration files for this DM. """ # Many implementations do nothing @abc.abstractmethod def greeter_setup(self): """ Additional setup for the greeter. """ # Most implementations do nothing @abc.abstractmethod def set_autologin(self, username, do_autologin, default_desktop_environment): """ Configure the DM inside the given @p root_mount_point with autologin (if @p do_autologin is True) for the given @p username. If the DM supports it, set the default DE to @p default_desktop_environment as well. """ class DMmdm(DisplayManager): name = "mdm" executable = "mdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with MDM as Desktop Manager mdm_conf_path = os.path.join(self.root_mount_point, "etc/mdm/custom.conf") if os.path.exists(mdm_conf_path): with open(mdm_conf_path, 'r') as mdm_conf: text = mdm_conf.readlines() 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 = ( "[daemon]\n" "AutomaticLogin={!s}\n" "AutomaticLoginEnable=True\n".format(username) ) else: line = ( "[daemon]\n" "AutomaticLoginEnable=False\n" ) mdm_conf.write(line) else: with open(mdm_conf_path, 'w') as mdm_conf: mdm_conf.write( '# Calamares - Configure automatic login for user\n' ) mdm_conf.write('[daemon]\n') if do_autologin: mdm_conf.write("AutomaticLogin={!s}\n".format(username)) mdm_conf.write('AutomaticLoginEnable=True\n') else: mdm_conf.write('AutomaticLoginEnable=False\n') def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'mdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '128', 'mdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'mdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"Linux Mint Display Manager"', '-u', '128', '-g', 'mdm', '-d', '/var/lib/mdm', '-s', '/usr/bin/nologin', 'mdm' ] ) libcalamares.utils.target_env_call( ['passwd', '-l', 'mdm'] ) libcalamares.utils.target_env_call( ['chown', 'root:mdm', '/var/lib/mdm'] ) libcalamares.utils.target_env_call( ['chmod', '1770', '/var/lib/mdm'] ) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i \"s|default.desktop|{!s}.desktop|g\" " "{!s}/etc/mdm/custom.conf".format( default_desktop_environment.desktop_file, self.root_mount_point ) ) def greeter_setup(self): pass class DMgdm(DisplayManager): name = "gdm" executable = "gdm" config = None # Set by have_dm() def have_dm(self): """ GDM exists with different executable names, so search for one of them and use it. """ for executable, config in ( ( "gdm", "etc/gdm/custom.conf" ), ( "gdm3", "etc/gdm3/daemon.conf" ) ): bin_path = "{!s}/usr/bin/{!s}".format(self.root_mount_point, executable) sbin_path = "{!s}/usr/sbin/{!s}".format(self.root_mount_point, executable) if os.path.exists(bin_path) or os.path.exists(sbin_path): # Keep the found-executable name around for later self.executable = executable self.config = config return True return False def set_autologin(self, username, do_autologin, default_desktop_environment): if self.config is None: raise ValueError( "No config file for GDM has been set." ) # Systems with GDM as Desktop Manager gdm_conf_path = os.path.join(self.root_mount_point, self.config) if os.path.exists(gdm_conf_path): with open(gdm_conf_path, 'r') as gdm_conf: text = gdm_conf.readlines() 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 = ( "[daemon]\n" "AutomaticLogin={!s}\n" "AutomaticLoginEnable=True\n".format(username) ) else: line = "[daemon]\nAutomaticLoginEnable=False\n" gdm_conf.write(line) else: with open(gdm_conf_path, 'w') as gdm_conf: gdm_conf.write( '# Calamares - Enable automatic login for user\n' ) gdm_conf.write('[daemon]\n') if do_autologin: gdm_conf.write("AutomaticLogin={!s}\n".format(username)) gdm_conf.write('AutomaticLoginEnable=True\n') else: gdm_conf.write('AutomaticLoginEnable=False\n') if (do_autologin): accountservice_dir = "{!s}/var/lib/AccountsService/users".format( self.root_mount_point ) userfile_path = "{!s}/{!s}".format(accountservice_dir, username) if os.path.exists(accountservice_dir): with open(userfile_path, "w") as userfile: userfile.write("[User]\n") if default_desktop_environment is not None: userfile.write("XSession={!s}\n".format( default_desktop_environment.desktop_file)) userfile.write("Icon=\n") def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'gdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '120', 'gdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'gdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"Gnome Display Manager"', '-u', '120', '-g', 'gdm', '-d', '/var/lib/gdm', '-s', '/usr/bin/nologin', 'gdm' ] ) libcalamares.utils.target_env_call( ['passwd', '-l', 'gdm'] ) libcalamares.utils.target_env_call( ['chown', '-R', 'gdm:gdm', '/var/lib/gdm'] ) def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMkdm(DisplayManager): name = "kdm" executable = "kdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with KDM as Desktop Manager kdm_conf_path = os.path.join( self.root_mount_point, "usr/share/config/kdm/kdmrc" ) # Check which path is in use: SUSE does something else. # Also double-check the default setting. Pick the first # one that exists in the target. for candidate_kdmrc in ( "usr/share/config/kdm/kdmrc", "usr/share/kde4/config/kdm/kdmrc", ): p = os.path.join(self.root_mount_point, candidate_kdmrc) if os.path.exists(p): kdm_conf_path = p break text = [] if os.path.exists(kdm_conf_path): with open(kdm_conf_path, 'r') as kdm_conf: text = kdm_conf.readlines() with open(kdm_conf_path, 'w') as kdm_conf: for line in text: if 'AutoLoginEnable=' in line: if do_autologin: line = 'AutoLoginEnable=true\n' else: line = 'AutoLoginEnable=false\n' if do_autologin and 'AutoLoginUser=' in line: line = "AutoLoginUser={!s}\n".format(username) kdm_conf.write(line) else: return ( _("Cannot write KDM configuration file"), _("KDM config file {!s} does not exist").format(kdm_conf_path) ) def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'kdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '135', 'kdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'kdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-u', '135', '-g', 'kdm', '-d', '/var/lib/kdm', '-s', '/bin/false', '-r', '-M', 'kdm' ] ) libcalamares.utils.target_env_call( ['chown', '-R', '135:135', 'var/lib/kdm'] ) def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMlxdm(DisplayManager): name = "lxdm" executable = "lxdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with LXDM as Desktop Manager lxdm_conf_path = os.path.join(self.root_mount_point, "etc/lxdm/lxdm.conf") text = [] if os.path.exists(lxdm_conf_path): with open(lxdm_conf_path, 'r') as lxdm_conf: text = lxdm_conf.readlines() with open(lxdm_conf_path, 'w') as lxdm_conf: for line in text: if 'autologin=' in line: if do_autologin: line = "autologin={!s}\n".format(username) else: line = "# autologin=\n" lxdm_conf.write(line) else: return ( _("Cannot write LXDM configuration file"), _("LXDM config file {!s} does not exist").format(lxdm_conf_path) ) def basic_setup(self): if libcalamares.utils.target_env_call( ['getent', 'group', 'lxdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '--system', 'lxdm'] ) libcalamares.utils.target_env_call( ['chgrp', '-R', 'lxdm', '/var/lib/lxdm'] ) libcalamares.utils.target_env_call( ['chgrp', 'lxdm', '/etc/lxdm/lxdm.conf'] ) libcalamares.utils.target_env_call( ['chmod', '+r', '/etc/lxdm/lxdm.conf'] ) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i -e \"s|^.*session=.*|session={!s}|\" " "{!s}/etc/lxdm/lxdm.conf".format( default_desktop_environment.executable, self.root_mount_point ) ) def greeter_setup(self): pass class DMlightdm(DisplayManager): name = "lightdm" executable = "lightdm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with LightDM as Desktop Manager # Ideally, we should use configparser for the ini conf file, # but we just do a simple text replacement for now, as it # worksforme(tm) lightdm_conf_path = os.path.join( self.root_mount_point, "etc/lightdm/lightdm.conf" ) text = [] addseat = False loopcount = 0 if os.path.exists(lightdm_conf_path): with open(lightdm_conf_path, 'r') as lightdm_conf: text = lightdm_conf.readlines() # Check to make sure [SeatDefaults] or [Seat:*] is in the config, # otherwise we'll risk malforming the config addseat = '[SeatDefaults]' not in text and '[Seat:*]' not in text with open(lightdm_conf_path, 'w') as lightdm_conf: if addseat: # Prepend Seat line to start of file rather than leaving it without one # This keeps the config from being malformed for LightDM text = ["[Seat:*]\n"] + text for line in text: if 'autologin-user=' in line: if do_autologin: line = "autologin-user={!s}\n".format(username) else: line = "#autologin-user=\n" lightdm_conf.write(line) else: try: # Create a new lightdm.conf file; this is documented to be # read last, after everything in lightdm.conf.d/ with open(lightdm_conf_path, 'w') as lightdm_conf: if do_autologin: lightdm_conf.write( "[Seat:*]\nautologin-user={!s}\n".format(username)) else: lightdm_conf.write( "[Seat:*]\n#autologin-user=\n") except FileNotFoundError: return ( _("Cannot write LightDM configuration file"), _("LightDM config file {!s} does not exist").format(lightdm_conf_path) ) def basic_setup(self): libcalamares.utils.target_env_call( ['mkdir', '-p', '/run/lightdm'] ) if libcalamares.utils.target_env_call( ['getent', 'group', 'lightdm'] ) != 0: libcalamares.utils.target_env_call( ['groupadd', '-g', '620', 'lightdm'] ) if libcalamares.utils.target_env_call( ['getent', 'passwd', 'lightdm'] ) != 0: libcalamares.utils.target_env_call( ['useradd', '-c', '"LightDM Display Manager"', '-u', '620', '-g', 'lightdm', '-d', '/var/run/lightdm', '-s', '/usr/bin/nologin', 'lightdm' ] ) libcalamares.utils.target_env_call(['passwd', '-l', 'lightdm']) libcalamares.utils.target_env_call(['chown', '-R', 'lightdm:lightdm', '/run/lightdm']) libcalamares.utils.target_env_call(['chmod', '+r' '/etc/lightdm/lightdm.conf']) def desktop_environment_setup(self, default_desktop_environment): os.system( "sed -i -e \"s/^.*user-session=.*/user-session={!s}/\" " "{!s}/etc/lightdm/lightdm.conf".format( default_desktop_environment.desktop_file, self.root_mount_point ) ) def greeter_setup(self): lightdm_conf_path = os.path.join( self.root_mount_point, "etc/lightdm/lightdm.conf" ) # configure lightdm-greeter greeter_path = os.path.join( self.root_mount_point, "usr/share/xgreeters" ) if (os.path.exists(greeter_path)): # configure first found lightdm-greeter for entry in os.listdir(greeter_path): if entry.endswith('.desktop'): greeter = entry.split('.')[0] libcalamares.utils.debug( "found greeter {!s}".format(greeter) ) os.system( "sed -i -e \"s/^.*greeter-session=.*" "/greeter-session={!s}/\" {!s}".format( greeter, lightdm_conf_path ) ) libcalamares.utils.debug( "{!s} configured as greeter.".format(greeter) ) break else: return ( _("Cannot configure LightDM"), _("No LightDM greeter installed.") ) class DMslim(DisplayManager): name = "slim" executable = "slim" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with Slim as Desktop Manager slim_conf_path = os.path.join(self.root_mount_point, "etc/slim.conf") text = [] if os.path.exists(slim_conf_path): with open(slim_conf_path, 'r') as slim_conf: text = slim_conf.readlines() with open(slim_conf_path, 'w') as slim_conf: for line in text: if 'auto_login' in line: if do_autologin: line = 'auto_login yes\n' else: line = 'auto_login no\n' if do_autologin and 'default_user' in line: line = "default_user {!s}\n".format(username) slim_conf.write(line) else: return ( _("Cannot write SLIM configuration file"), _("SLIM config file {!s} does not exist").format(slim_conf_path) ) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMsddm(DisplayManager): name = "sddm" executable = "sddm" def set_autologin(self, username, do_autologin, default_desktop_environment): # Systems with Sddm as Desktop Manager sddm_conf_path = os.path.join(self.root_mount_point, "etc/sddm.conf") sddm_config = configparser.ConfigParser(strict=False) # Make everything case sensitive sddm_config.optionxform = str if os.path.isfile(sddm_conf_path): sddm_config.read(sddm_conf_path) if 'Autologin' not in sddm_config: sddm_config.add_section('Autologin') if do_autologin: sddm_config.set('Autologin', 'User', username) elif sddm_config.has_option('Autologin', 'User'): sddm_config.remove_option('Autologin', 'User') if default_desktop_environment is not None: sddm_config.set( 'Autologin', 'Session', default_desktop_environment.desktop_file ) with open(sddm_conf_path, 'w') as sddm_config_file: sddm_config.write(sddm_config_file, space_around_delimiters=False) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass class DMsysconfig(DisplayManager): name = "sysconfig" executable = None def set_autologin(self, username, do_autologin, default_desktop_environment): dmauto = "DISPLAYMANAGER_AUTOLOGIN" os.system( "sed -i -e 's|^{!s}=.*|{!s}=\"{!s}\"|' " "{!s}/etc/sysconfig/displaymanager".format( dmauto, dmauto, username if do_autologin else "", self.root_mount_point ) ) def basic_setup(self): pass def desktop_environment_setup(self, desktop_environment): pass def greeter_setup(self): pass # For openSUSE-derivatives, there is only sysconfig to configure, # and no special DM configuration for it. Instead, check that # sysconfig is available in the target. def have_dm(self): config = "{!s}/etc/sysconfig/displaymanager".format(self.root_mount_point) return os.path.exists(config) # Collect all the subclasses of DisplayManager defined above, # and index them based on the name property of each class. display_managers = [ (c.name, c) for c in globals().values() if type(c) is abc.ABCMeta and issubclass(c, DisplayManager) and c.name ] def run(): """ Configure display managers. We acquire a list of displaymanagers, either from config or (overridden) from globalstorage. This module will try to set up (including autologin) all the displaymanagers in the list, in that specific order. Most distros will probably only ship one displaymanager. If a displaymanager is in the list but not installed, a debugging message is printed and the entry ignored. """ # Get configuration settings for display managers displaymanagers = None if "displaymanagers" in libcalamares.job.configuration: displaymanagers = libcalamares.job.configuration["displaymanagers"] if libcalamares.globalstorage.contains("displayManagers"): displaymanagers = libcalamares.globalstorage.value("displayManagers") if ("sysconfigSetup" in libcalamares.job.configuration and libcalamares.job.configuration["sysconfigSetup"]): displaymanagers = ["sysconfig"] if not displaymanagers: return ( _("No display managers selected for the displaymanager module."), _("The displaymanagers list is empty or undefined in both " "globalstorage and displaymanager.conf.") ) # Get instances that are actually installed root_mount_point = libcalamares.globalstorage.value("rootMountPoint") dm_impl = [] dm_names = displaymanagers[:] for dm in dm_names: # Find the implementation class dm_instance = None impl = [ cls for name, cls in display_managers if name == dm ] if len(impl) == 1: dm_instance = impl[0](root_mount_point) if dm_instance.have_dm(): dm_impl.append(dm_instance) else: dm_instance = None else: libcalamares.utils.debug("{!s} has {!d} implementation classes.".format(dm).format(len(impl))) if dm_instance is None: libcalamares.utils.debug("{!s} selected but not installed".format(dm)) if dm in displaymanagers: displaymanagers.remove(dm) if not dm_impl: libcalamares.utils.warning( "No display managers selected for the displaymanager module. " "The list is empty after checking for installed display managers." ) return None # Pick up remaining settings if "defaultDesktopEnvironment" in libcalamares.job.configuration: entry = libcalamares.job.configuration["defaultDesktopEnvironment"] default_desktop_environment = DesktopEnvironment( entry["executable"], entry["desktopFile"] ) # Adjust if executable is bad, but desktopFile isn't. if not default_desktop_environment.update_from_desktop_file(root_mount_point): libcalamares.utils.warning( "The configured default desktop environment, {!s}, " "can not be found.".format(default_desktop_environment.desktop_file)) else: default_desktop_environment = find_desktop_environment( root_mount_point ) if "basicSetup" in libcalamares.job.configuration: enable_basic_setup = libcalamares.job.configuration["basicSetup"] else: enable_basic_setup = False username = libcalamares.globalstorage.value("autoLoginUser") if username is not None: do_autologin = True libcalamares.utils.debug("Setting up autologin for user {!s}.".format(username)) else: do_autologin = False libcalamares.utils.debug("Unsetting autologin.") libcalamares.globalstorage.insert("displayManagers", displaymanagers) # Do the actual configuration and collect messages dm_setup_message = [] for dm in dm_impl: dm_message = None if enable_basic_setup: dm_message = dm.basic_setup() if default_desktop_environment is not None and dm_message is None: dm_message = dm.desktop_environment_setup(default_desktop_environment) if dm_message is None: dm_message = dm.greeter_setup() if dm_message is None: dm_message = dm.set_autologin(username, do_autologin, default_desktop_environment) if dm_message is not None: dm_setup_message.append("{!s}: {!s}".format(*dm_message)) if dm_setup_message: return ( _("Display manager configuration was incomplete"), "\n".join(dm_setup_message) ) calamares-3.2.41.1/src/modules/displaymanager/module.desc000066400000000000000000000002361410275732300232610ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "displaymanager" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/dracut/000077500000000000000000000000001410275732300174155ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dracut/main.py000066400000000000000000000025041410275732300207140ustar00rootroot00000000000000#!/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 dracut.") def run_dracut(): """ Creates initramfs, even when initramfs already exists. :return: """ return target_env_call(['dracut', '-f']) def run(): """ Starts routine to create initramfs. It passes back the exit code if it fails. :return: """ return_code = run_dracut() if return_code != 0: return ( _("Failed to run dracut on the target"), _("The exit code was {}").format(return_code) ) calamares-3.2.41.1/src/modules/dracut/module.desc000066400000000000000000000002261410275732300215420ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "dracut" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/dracutlukscfg/000077500000000000000000000000001410275732300207745ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dracutlukscfg/CMakeLists.txt000066400000000000000000000005201410275732300235310ustar00rootroot00000000000000# === 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 SHARED_LIB NO_CONFIG ) calamares-3.2.41.1/src/modules/dracutlukscfg/DracutLuksCfgJob.cpp000066400000000000000000000121431410275732300246350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "DracutLuksCfgJob.h" #include #include #include #include #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" static const QLatin1String CONFIG_FILE( "/etc/dracut.conf.d/calamares-luks.conf" ); 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 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 CONFIG_FILE_CRYPTTAB_LINE[] = "# force installing /etc/crypttab even if hostonly=\"no\"\n" "install_items+=\" /etc/crypttab \"\n"; static const QLatin1String CONFIG_FILE_SWAPLINE( "# enable automatic resume from swap\nadd_device+=\" /dev/disk/by-uuid/%1 \"\n" ); static QString rootMountPoint() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "rootMountPoint" ) ).toString(); } static QVariantList partitions() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); } static bool isRootEncrypted() { const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString(); if ( mountPoint == QStringLiteral( "/" ) ) { return partitionMap.contains( QStringLiteral( "luksMapperName" ) ); } } return false; } static bool hasUnencryptedSeparateBoot() { const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString(); if ( mountPoint == QStringLiteral( "/boot" ) ) { return !partitionMap.contains( QStringLiteral( "luksMapperName" ) ); } } return false; } static QString swapOuterUuid() { const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString fsType = partitionMap.value( QStringLiteral( "fs" ) ).toString(); if ( fsType == QStringLiteral( "linuxswap" ) && partitionMap.contains( QStringLiteral( "luksMapperName" ) ) ) { return partitionMap.value( QStringLiteral( "luksUuid" ) ).toString(); } } return QString(); } DracutLuksCfgJob::DracutLuksCfgJob( QObject* parent ) : Calamares::CppJob( parent ) { } DracutLuksCfgJob::~DracutLuksCfgJob() {} QString DracutLuksCfgJob::prettyName() const { if ( isRootEncrypted() ) { return tr( "Write LUKS configuration for Dracut to %1" ).arg( CONFIG_FILE ); } else { return tr( "Skip writing LUKS configuration for Dracut: \"/\" partition is not encrypted" ); } } Calamares::JobResult DracutLuksCfgJob::exec() { if ( isRootEncrypted() ) { const QString realConfigFilePath = rootMountPoint() + CONFIG_FILE; cDebug() << "[DRACUTLUKSCFG]: Writing" << realConfigFilePath; QDir( QStringLiteral( "/" ) ).mkpath( QFileInfo( realConfigFilePath ).absolutePath() ); QFile configFile( realConfigFilePath ); if ( !configFile.open( QIODevice::WriteOnly | QIODevice::Text ) ) { cDebug() << "[DRACUTLUKSCFG]: Failed to open" << realConfigFilePath; return Calamares::JobResult::error( tr( "Failed to open %1" ).arg( realConfigFilePath ) ); } QTextStream outStream( &configFile ); outStream << CONFIG_FILE_HEADER << ( hasUnencryptedSeparateBoot() ? CONFIG_FILE_CRYPTTAB_LINE : CONFIG_FILE_CRYPTTAB_KEYFILE_LINE ); const QString swapOuterUuid = ::swapOuterUuid(); if ( !swapOuterUuid.isEmpty() ) { cDebug() << "[DRACUTLUKSCFG]: Swap outer UUID" << swapOuterUuid; outStream << QString( CONFIG_FILE_SWAPLINE ).arg( swapOuterUuid ).toLatin1(); } cDebug() << "[DRACUTLUKSCFG]: Wrote config to" << realConfigFilePath; } else { cDebug() << "[DRACUTLUKSCFG]: / not encrypted, skipping"; } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( DracutLuksCfgJobFactory, registerPlugin< DracutLuksCfgJob >(); ) calamares-3.2.41.1/src/modules/dracutlukscfg/DracutLuksCfgJob.h000066400000000000000000000015701410275732300243040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DRACUTLUKSCFGJOB_H #define DRACUTLUKSCFGJOB_H #include #include #include "CppJob.h" #include "utils/PluginFactory.h" #include "DllMacro.h" class PLUGINDLLEXPORT DracutLuksCfgJob : public Calamares::CppJob { Q_OBJECT public: explicit DracutLuksCfgJob( QObject* parent = nullptr ); ~DracutLuksCfgJob() override; QString prettyName() const override; Calamares::JobResult exec() override; private: }; CALAMARES_PLUGIN_FACTORY_DECLARATION( DracutLuksCfgJobFactory ) #endif // DRACUTLUKSCFGJOB_H calamares-3.2.41.1/src/modules/dummycpp/000077500000000000000000000000001410275732300177715ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummycpp/CMakeLists.txt000066400000000000000000000004701410275732300225320ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares-3.2.41.1/src/modules/dummycpp/DummyCppJob.cpp000066400000000000000000000112521410275732300226670ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "DummyCppJob.h" #include #include #include #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" DummyCppJob::DummyCppJob( QObject* parent ) : Calamares::CppJob( parent ) { } DummyCppJob::~DummyCppJob() {} QString DummyCppJob::prettyName() const { return tr( "Dummy C++ Job" ); } static QString variantListToString( const QVariantList& variantList ); static QString variantMapToString( const QVariantMap& variantMap ); static QString variantHashToString( const QVariantHash& variantHash ); static QString variantToString( const QVariant& variant ) { if ( variant.type() == QVariant::Map ) { return variantMapToString( variant.toMap() ); } else if ( variant.type() == QVariant::Hash ) { return variantHashToString( variant.toHash() ); } else if ( ( variant.type() == QVariant::List ) || ( variant.type() == QVariant::StringList ) ) { return variantListToString( variant.toList() ); } else { return variant.toString(); } } static QString variantListToString( const QVariantList& variantList ) { QStringList result; for ( const QVariant& variant : variantList ) { result.append( variantToString( variant ) ); } return '{' + result.join( ',' ) + '}'; } static QString variantMapToString( const QVariantMap& variantMap ) { QStringList result; for ( auto it = variantMap.constBegin(); it != variantMap.constEnd(); ++it ) { result.append( it.key() + '=' + variantToString( it.value() ) ); } return '[' + result.join( ',' ) + ']'; } static QString variantHashToString( const QVariantHash& variantHash ) { QStringList result; for ( auto it = variantHash.constBegin(); it != variantHash.constEnd(); ++it ) { result.append( it.key() + '=' + variantToString( it.value() ) ); } return '<' + result.join( ',' ) + '>'; } Calamares::JobResult DummyCppJob::exec() { // Ported from dummypython CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, QStringList() << "/bin/sh" << "-c" << "touch ~/calamares-dummycpp" ); QString accumulator = QDateTime::currentDateTimeUtc().toString( Qt::ISODate ) + '\n'; accumulator += QStringLiteral( "Calamares version: " ) + CALAMARES_VERSION_SHORT + '\n'; accumulator += QStringLiteral( "This job's name: " ) + prettyName() + '\n'; accumulator += QStringLiteral( "Configuration map: %1\n" ).arg( variantMapToString( m_configurationMap ) ); accumulator += QStringLiteral( " *** globalstorage test ***\n" ); Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); accumulator += QStringLiteral( "lala: " ) + ( globalStorage->contains( "lala" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n'; accumulator += QStringLiteral( "foo: " ) + ( globalStorage->contains( "foo" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n'; accumulator += QStringLiteral( "count: " ) + QString::number( globalStorage->count() ) + '\n'; globalStorage->insert( "item2", "value2" ); globalStorage->insert( "item3", 3 ); accumulator += QStringLiteral( "keys: %1\n" ).arg( globalStorage->keys().join( ',' ) ); accumulator += QStringLiteral( "remove: %1\n" ).arg( QString::number( globalStorage->remove( "item2" ) ) ); accumulator += QStringLiteral( "values: %1 %2 %3\n" ) .arg( globalStorage->value( "foo" ).toString(), globalStorage->value( "item2" ).toString(), globalStorage->value( "item3" ).toString() ); emit progress( 0.1 ); cDebug() << "[DUMMYCPP]: " << accumulator; globalStorage->debugDump(); emit progress( 0.5 ); QThread::sleep( 3 ); return Calamares::JobResult::ok(); } void DummyCppJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_configurationMap = configurationMap; } CALAMARES_PLUGIN_FACTORY_DEFINITION( DummyCppJobFactory, registerPlugin< DummyCppJob >(); ) calamares-3.2.41.1/src/modules/dummycpp/DummyCppJob.h000066400000000000000000000017101410275732300223320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Kevin Kofler * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DUMMYCPPJOB_H #define DUMMYCPPJOB_H #include #include #include "CppJob.h" #include "utils/PluginFactory.h" #include "DllMacro.h" class PLUGINDLLEXPORT DummyCppJob : public Calamares::CppJob { Q_OBJECT public: explicit DummyCppJob( QObject* parent = nullptr ); ~DummyCppJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QVariantMap m_configurationMap; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( DummyCppJobFactory ) #endif // DUMMYCPPJOB_H calamares-3.2.41.1/src/modules/dummycpp/dummycpp.conf000066400000000000000000000010261410275732300224750ustar00rootroot00000000000000# 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. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummycpp.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.41.1/src/modules/dummycpp/module.desc000066400000000000000000000015501410275732300221170ustar00rootroot00000000000000# 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: # the CMakeLists.txt should be using calamares_add_plugin() which will # generate the metadata file during the build. Only C++ plugins that # have strange settings should have a module.desc (non-C++ plugins, # on the other hand, must have one, since they don't have CMakeLists.txt). # # Syntax is YAML 1.2 # # All four keys are mandatory. For C++ (qtplugin) modules, the interface # value must be "qtplugin"; type is one of "job" or "view"; the name # is the machine-identifier for the module and the load value should # be the filename of the library that contains the implementation. # --- type: "job" name: "dummycpp" interface: "qtplugin" load: "libcalamares_job_dummycpp.so" calamares-3.2.41.1/src/modules/dummyprocess/000077500000000000000000000000001410275732300206655ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummyprocess/module.desc000066400000000000000000000004651410275732300230170ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy process jobmodule # Syntax is YAML 1.2 --- type: "job" name: "dummyprocess" interface: "process" chroot: false command: "/bin/sh -c \"sleep 5 ; touch ~/calamares-dummyprocess\"" timeout: 8 calamares-3.2.41.1/src/modules/dummypython/000077500000000000000000000000001410275732300205305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypython/dummypython.conf000066400000000000000000000010441410275732300237730ustar00rootroot00000000000000# 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. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummypython.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.41.1/src/modules/dummypython/main.py000066400000000000000000000067321410275732300220360ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # """ === Example Python jobmodule. A Python jobmodule is a Python program which imports libcalamares and has a function run() as entry point. run() must return None if everything went well, or a tuple (str,str) with an error message and description if something went wrong. """ import libcalamares import os from time import gmtime, strftime, sleep import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Dummy python job.") status = _("Dummy python step {}").format(0) def pretty_status_message(): return status def run(): """Dummy python job.""" libcalamares.utils.debug("LocaleDir=" + str(libcalamares.utils.gettext_path())) libcalamares.utils.debug("Languages=" + str(libcalamares.utils.gettext_languages())) os.system("/bin/sh -c \"touch ~/calamares-dummypython\"") accumulator = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + "\n" accumulator += "Calamares version: " + libcalamares.VERSION_SHORT + "\n" accumulator += "This job's name: " + libcalamares.job.pretty_name + "\n" accumulator += "This job's path: " + libcalamares.job.working_path libcalamares.utils.debug(accumulator) accumulator = "*** Job configuration " accumulator += str(libcalamares.job.configuration) libcalamares.utils.debug(accumulator) accumulator = "*** globalstorage test ***" accumulator += "lala: " accumulator += str(libcalamares.globalstorage.contains("lala")) + "\n" accumulator += "foo: " accumulator += str(libcalamares.globalstorage.contains("foo")) + "\n" accumulator += "count: " + str(libcalamares.globalstorage.count()) libcalamares.utils.debug(accumulator) libcalamares.globalstorage.insert("item2", "value2") libcalamares.globalstorage.insert("item3", 3) accumulator = "keys: {}\n".format(str(libcalamares.globalstorage.keys())) libcalamares.utils.debug(accumulator) accumulator = "remove: {}\n".format( str(libcalamares.globalstorage.remove("item2"))) accumulator += "values: {} {} {}\n".format( str(libcalamares.globalstorage.value("foo")), str(libcalamares.globalstorage.value("item2")), str(libcalamares.globalstorage.value("item3"))) libcalamares.utils.debug(accumulator) libcalamares.utils.debug("Run dummy python") sleep(1) try: configlist = list(libcalamares.job.configuration["a_list"]) except KeyError: configlist = ["no list"] global status c = 1 for k in configlist: status = _("Dummy python step {}").format(str(c) + ":" + repr(k)) libcalamares.utils.debug(_("Dummy python step {}").format(str(k))) sleep(1) libcalamares.job.setprogress(c * 1.0 / (len(configlist)+1)) c += 1 sleep(3) # To indicate an error, return a tuple of: # (message, detailed-error-message) return None calamares-3.2.41.1/src/modules/dummypython/module.desc000066400000000000000000000003421410275732300226540ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy python jobmodule # Syntax is YAML 1.2 --- type: "job" name: "dummypython" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/dummypythonqt/000077500000000000000000000000001410275732300210755ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/dummypythonqt.conf000066400000000000000000000010331410275732300247030ustar00rootroot00000000000000# 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. --- syntax: "YAML map of anything" example: whats_this: "module-specific configuration" from_where: "dummypythonqt.conf" a_list: - "item1" - "item2" - "item3" - "item4" a_list_of_maps: - name: "an Item" contents: - "an element" - "another element" - name: "another item" contents: - "not much" calamares-3.2.41.1/src/modules/dummypythonqt/lang/000077500000000000000000000000001410275732300220165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ar/000077500000000000000000000000001410275732300224205ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/000077500000000000000000000000001410275732300242055ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ar/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030441410275732300275100ustar00rootroot00000000000000# 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: # Abubakaragoub Y , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Abubakaragoub Y , 2018\n" "Language-Team: Arabic (https://www.transifex.com/calamares/teams/20061/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "اضغط علي!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel جديد" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "دميه خطوة PythonQt " #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "دميه عملية PythonQt " #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "هذة دميه عملية خطوة PythonQt. و تقول: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "رسالة حاله دميه عملية خطوة PythonQt" calamares-3.2.41.1/src/modules/dummypythonqt/lang/as/000077500000000000000000000000001410275732300224215ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/as/LC_MESSAGES/000077500000000000000000000000001410275732300242065ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/as/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034111410275732300275070ustar00rootroot00000000000000# 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: # Deep Jyoti Choudhury , 2020 # Wrishiraj Kaushik , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Wrishiraj Kaushik , 2020\n" "Language-Team: Assamese (https://www.transifex.com/calamares/teams/20061/as/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: as\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 "এটা নতুন QLabel।" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ডামী পাইথন-কিউট্ ViewStep" #: 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 "ডামী পাইথন-কিউট্ কায্যৰ বাবে এটা অৱস্থা বাৰ্তা।" calamares-3.2.41.1/src/modules/dummypythonqt/lang/ast/000077500000000000000000000000001410275732300226055ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/000077500000000000000000000000001410275732300243725ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ast/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027011410275732300276740ustar00rootroot00000000000000# 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: # enolp , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: enolp , 2019\n" "Language-Team: Asturian (https://www.transifex.com/calamares/teams/20061/ast/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ast\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Cálcame!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una QLabel nueva." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep maniquín en PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "El trabayu maniquín en PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esti ye'l trabayu maniquín en PythonQt. El trabayu maniquín diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaxe d'estáu pal trabayu maniquín en PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/be/000077500000000000000000000000001410275732300224045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/be/LC_MESSAGES/000077500000000000000000000000001410275732300241715ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/be/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031641410275732300274770ustar00rootroot00000000000000# 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: # Zmicer Turok , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Zmicer Turok , 2018\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Націсніце сюды! " #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Новы QLabel. " #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Гэта Dummy PythonQt Job. Фіктыўная задача паведамляе: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Паведамленне статусу Dummy PythonQt Job. " calamares-3.2.41.1/src/modules/dummypythonqt/lang/bg/000077500000000000000000000000001410275732300224065ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/000077500000000000000000000000001410275732300241735ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/bg/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721410275732300274770ustar00rootroot00000000000000# 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: # Georgi Georgiev , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Georgi Georgiev , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: bg\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 "Нов QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Фиктивен PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Фиктивната задача PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Това е фиктивната задача PythonQt. Фиктивната задача заявява: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Съобщение за състоянието на фиктивната задача PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/bn/000077500000000000000000000000001410275732300224155ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/000077500000000000000000000000001410275732300242025ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/bn/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741410275732300275100ustar00rootroot00000000000000# 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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca/000077500000000000000000000000001410275732300224015ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/000077500000000000000000000000001410275732300241665ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026371410275732300275000ustar00rootroot00000000000000# 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: # Davidmp , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Davidmp , 2019\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" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clica'm!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una etiqueta Q nova." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Vistes de Dummy PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La tasca Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Soc la tasca Dummy PythonQt. La tasca diu el següent: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un missatge d'estat per a la tasca Dummy PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca@valencia/000077500000000000000000000000001410275732300242045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/000077500000000000000000000000001410275732300257715ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ca@valencia/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022321410275732300312720ustar00rootroot00000000000000# 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: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: ca@valencia\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/cs_CZ/000077500000000000000000000000001410275732300230175ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/000077500000000000000000000000001410275732300246045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/cs_CZ/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030721410275732300301100ustar00rootroot00000000000000# 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: # pavelrz, 2017 # Pavel Borecki , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Pavel Borecki , 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikněte na mě!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nový QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testovací PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testovací úloha PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Toto je testovací úloha PythonQt. Testovací úloha sděluje: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stavová zpráva o testovací úloze PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/da/000077500000000000000000000000001410275732300224025ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/da/LC_MESSAGES/000077500000000000000000000000001410275732300241675ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/da/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025671410275732300275030ustar00rootroot00000000000000# 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: # scootergrisen, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: scootergrisen, 2017\n" "Language-Team: Danish (https://www.transifex.com/calamares/teams/20061/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik på mig!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "En ny QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt-visningstrin" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt-jobbet" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dette er dummy PythonQt-jobbet. Dummy-jobbet siger: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "En statusmeddelelse til dummy PythonQt-job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/de/000077500000000000000000000000001410275732300224065ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/de/LC_MESSAGES/000077500000000000000000000000001410275732300241735ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/de/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026011410275732300274740ustar00rootroot00000000000000# 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: # Christian Spaan, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Christian Spaan, 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klick mich!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Ein neues QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Der Dummy-PythonQt-Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dies ist der Dummy-PythonQt-Job. Der Dummy-Job lautet: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Eine Statusmeldung für den Dummy-PythonQt-Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/dummypythonqt.pot000066400000000000000000000023621410275732300255070ustar00rootroot00000000000000# 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: 2021-03-14 16:14+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-Transfer-Encoding: 8bit\n" "Language: \n" #: src/modules/dummypythonqt/main.py:75 msgid "Click me!" msgstr "Click me!" #: src/modules/dummypythonqt/main.py:85 msgid "A new QLabel." msgstr "A new QLabel." #: src/modules/dummypythonqt/main.py:88 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:174 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: 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:181 msgid "A status message for Dummy PythonQt Job." msgstr "A status message for Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/el/000077500000000000000000000000001410275732300224165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/el/LC_MESSAGES/000077500000000000000000000000001410275732300242035ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/el/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021721410275732300275070ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: el\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/en_GB/000077500000000000000000000000001410275732300227705ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/000077500000000000000000000000001410275732300245555ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/en_GB/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027031410275732300300610ustar00rootroot00000000000000# 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: # Jason Collins , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Jason Collins , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Click me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "A new QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 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 msgid "A status message for Dummy PythonQt Job." msgstr "A status message for Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/eo/000077500000000000000000000000001410275732300224215ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/000077500000000000000000000000001410275732300242065ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/eo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771410275732300275240ustar00rootroot00000000000000# 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: # Kurt Ankh Phoenix , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Kurt Ankh Phoenix , 2018\n" "Language-Team: Esperanto (https://www.transifex.com/calamares/teams/20061/eo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Alklaku min!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Formala PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La Formala PythonQt Laboro" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ĉi tiu estas la Formala PythonQt Laboro. La formala laboro diras: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Statusa mesaĝo por Formala PythonQt Laboro." calamares-3.2.41.1/src/modules/dummypythonqt/lang/es/000077500000000000000000000000001410275732300224255ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es/LC_MESSAGES/000077500000000000000000000000001410275732300242125ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026031410275732300275150ustar00rootroot00000000000000# 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: # strel, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: strel, 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Púlsame!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nueva QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep de PythonQt Ficticia" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "La Tarea PythonQt Ficticia" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta es la Tarea PythonQt Ficticia. La tarea ficticia dice: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaje de estado para la Tarea PythonQt Ficticia." calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_MX/000077500000000000000000000000001410275732300230315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/000077500000000000000000000000001410275732300246165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_MX/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027551410275732300301310ustar00rootroot00000000000000# 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: # guillermo pacheco , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: guillermo pacheco , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "¡Haz clic en mí!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nueva QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Vision del PythonQt ficticio" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Trabajo del PythonQt ficticio" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Este es el Trabajo PythonQt ficticio. El trabajo ficticio dice: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mensaje de estado para el trabajo PythonQt ficticio." calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_PR/000077500000000000000000000000001410275732300230265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/000077500000000000000000000000001410275732300246135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/es_PR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022201410275732300301110ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Spanish (Puerto Rico) (https://www.transifex.com/calamares/teams/20061/es_PR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_PR\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/et/000077500000000000000000000000001410275732300224265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/et/LC_MESSAGES/000077500000000000000000000000001410275732300242135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/et/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025571410275732300275260ustar00rootroot00000000000000# 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: # Madis Otenurm, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-07-06 01:16+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Madis Otenurm, 2018\n" "Language-Team: Estonian (https://www.transifex.com/calamares/teams/20061/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klõpsa mind!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uus QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testiv PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testiv PythonQt Töö" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "See on testiv PythonQt töö. Testiv töö ütleb: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Olekusõnum testivale PythonQt tööle." calamares-3.2.41.1/src/modules/dummypythonqt/lang/eu/000077500000000000000000000000001410275732300224275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/000077500000000000000000000000001410275732300242145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/eu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025661410275732300275270ustar00rootroot00000000000000# 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: # Ander Elortondo, 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ander Elortondo, 2019\n" "Language-Team: Basque (https://www.transifex.com/calamares/teams/20061/eu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Egidazu klik!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel berria." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt pauso-ikuspegia" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr " Dummy PythonQt lana" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Hau Dummy PythonQt lana da. Dummy lanak zera dio: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Dummy PythonQt lanaren egoera mezua." calamares-3.2.41.1/src/modules/dummypythonqt/lang/fa/000077500000000000000000000000001410275732300224045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/000077500000000000000000000000001410275732300241715ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fa/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027451410275732300275030ustar00rootroot00000000000000# 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: # Danial Behzadi , 2020 # #, 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" "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" "Content-Transfer-Encoding: 8bit\n" "Language: fa\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 "یک QLabel جدید." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "گام نمایش PythonQt الکی" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "کار PythonQt الکی" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "این کار PythonQt الکی است. کار الکی می‌گوید: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "پیام وضعیتی برای کار PythonQt الکی." calamares-3.2.41.1/src/modules/dummypythonqt/lang/fi_FI/000077500000000000000000000000001410275732300227725ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/000077500000000000000000000000001410275732300245575ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fi_FI/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027571410275732300300740ustar00rootroot00000000000000# 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: # Assalat3 , 2017 # Kimmo Kujansuu , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Kimmo Kujansuu , 2019\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" "Content-Transfer-Encoding: 8bit\n" "Language: fi_FI\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikkaa minua!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uusi Qtyönimi." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Näppärä Python Qt-näkymä" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Näppärä Python Qt-työkalu" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Tämä on näppärä Python Qt-työkalu. Näennäinen työ sanoo: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Python Qt-työkalun tilailmoitus." calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr/000077500000000000000000000000001410275732300224255ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/000077500000000000000000000000001410275732300242125ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027631410275732300275240ustar00rootroot00000000000000# 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: # Paul Combal , 2017 # Aestan , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Aestan , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Cliquez-moi!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Un nouveau QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep Factice PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Tâche Factice PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ceci est la tâche factice PythonQt. La tâche factice dit : {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un message d'état pour la tâche factice PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr_CH/000077500000000000000000000000001410275732300227775ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/000077500000000000000000000000001410275732300245645ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/fr_CH/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022161410275732300300670ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+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/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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/gl/000077500000000000000000000000001410275732300224205ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/000077500000000000000000000000001410275732300242055ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/gl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025601410275732300275120ustar00rootroot00000000000000# 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: # Xosé, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Xosé, 2018\n" "Language-Team: Galician (https://www.transifex.com/calamares/teams/20061/gl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Prémeme!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Unha QLabel nova." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep parvo de PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A tarefa parva de PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a tarefa parva de PythonQt. A tarefa parva di: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Unha mensaxe parva para Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/gu/000077500000000000000000000000001410275732300224315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/000077500000000000000000000000001410275732300242165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/gu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021751410275732300275250ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Gujarati (https://www.transifex.com/calamares/teams/20061/gu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/he/000077500000000000000000000000001410275732300224125ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/he/LC_MESSAGES/000077500000000000000000000000001410275732300241775ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/he/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031241410275732300275010ustar00rootroot00000000000000# 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: # Eli Shleifer , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Eli Shleifer , 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "לחץ עליי!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "QLabel חדש." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "שלב הצפייה של משימת הדמה של PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "משימת הדמה של PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "זוהי משימת הדמה של PythonQt. משימת הדמה אומרת: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "הודעת מצב עבור משימת דמה של PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/hi/000077500000000000000000000000001410275732300224165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/000077500000000000000000000000001410275732300242035ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hi/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033311410275732300275050ustar00rootroot00000000000000# 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: # Panwar108 , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Panwar108 , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: hi\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 "नया QLabel।" #: 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 "डमी पाइथन प्रक्रिया की अवस्था संबंधी संदेश।" calamares-3.2.41.1/src/modules/dummypythonqt/lang/hr/000077500000000000000000000000001410275732300224275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/000077500000000000000000000000001410275732300242145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027651410275732300275300ustar00rootroot00000000000000# 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: # Lovro Kudelić , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Lovro Kudelić , 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikni me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Novi QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Testni PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Testni PythonQt posao" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ovo je testni PythonQt posao. Testni posao kaže: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Statusna poruka za testni PythonQt posao." calamares-3.2.41.1/src/modules/dummypythonqt/lang/hu/000077500000000000000000000000001410275732300224325ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/000077500000000000000000000000001410275732300242175ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/hu/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026171410275732300275270ustar00rootroot00000000000000# 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: # Lajos Pasztor , 2016 # miku84, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: miku84, 2017\n" "Language-Team: Hungarian (https://www.transifex.com/calamares/teams/20061/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Kattints ide!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Egy új QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Hamis PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Egy PythonQt Job teszt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ez egy PythonQt Job teszt. A teszt job azt mondja: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Sztátus üzenet egy PythonQt Job-hoz." calamares-3.2.41.1/src/modules/dummypythonqt/lang/id/000077500000000000000000000000001410275732300224125ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/id/LC_MESSAGES/000077500000000000000000000000001410275732300241775ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/id/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027041410275732300275040ustar00rootroot00000000000000# 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: # Kukuh Syafaat , 2016 # Wantoyèk , 2017 # #, 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" "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" "Content-Transfer-Encoding: 8bit\n" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik saya!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Sebuah QLabel baru." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ini adalah Dummy PythonQt Job. Dummy job mengatakan: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Sebuah pesan status untuk Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/is/000077500000000000000000000000001410275732300224315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/is/LC_MESSAGES/000077500000000000000000000000001410275732300242165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/is/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026201410275732300275200ustar00rootroot00000000000000# 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: # Kristján Magnússon, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: is\n" "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Smelltu mig!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nýtt QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Þetta er Dummy PythonQt Job. Dummy job segir: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stöðuskilaboð fyrir Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/it_IT/000077500000000000000000000000001410275732300230265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/000077500000000000000000000000001410275732300246135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/it_IT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027451410275732300301250ustar00rootroot00000000000000# 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: # Teo Mrnjavac , 2016 # Saverio , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Saverio , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clicca qui!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Una nuova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "PythonQt ViewStep fittizio" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Il Job Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Questo è il Job Dummy PythonQt. Il dummy job notifica: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un messaggio di stato per il Job Dummy PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/ja/000077500000000000000000000000001410275732300224105ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/000077500000000000000000000000001410275732300241755ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ja/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026211410275732300275000ustar00rootroot00000000000000# 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: # Takefumi Nagata, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Takefumi Nagata, 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "クリックしてください!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "新しいQLabel" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "これはDummy PythonQtジョブです。Dummy ジョブの出力: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "ダミーのPythonQtジョブの状態" calamares-3.2.41.1/src/modules/dummypythonqt/lang/kk/000077500000000000000000000000001410275732300224235ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/000077500000000000000000000000001410275732300242105ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/kk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711410275732300275130ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Kazakh (https://www.transifex.com/calamares/teams/20061/kk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kk\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/kn/000077500000000000000000000000001410275732300224265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/000077500000000000000000000000001410275732300242135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/kn/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021731410275732300275200ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Kannada (https://www.transifex.com/calamares/teams/20061/kn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/ko/000077500000000000000000000000001410275732300224275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/000077500000000000000000000000001410275732300242145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ko/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027671410275732300275320ustar00rootroot00000000000000# 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: # MarongHappy , 2019 # 김지현 , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: 김지현 , 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: ko\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "여기를 클릭하세요!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "새로운 QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "더미 PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "더미 PythonQt 작업" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "더미 PythonQt 작업입니다. 이 더미 작업의 출력은 다음과 같습니다: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "더미 PythonQt 작업의 상태 메시지" calamares-3.2.41.1/src/modules/dummypythonqt/lang/lo/000077500000000000000000000000001410275732300224305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/000077500000000000000000000000001410275732300242155ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lo/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021611410275732300275170ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Lao (https://www.transifex.com/calamares/teams/20061/lo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lo\n" "Plural-Forms: nplurals=1; plural=0;\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/lt/000077500000000000000000000000001410275732300224355ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/000077500000000000000000000000001410275732300242225ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lt/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030041410275732300275210ustar00rootroot00000000000000# 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: # Moo, 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Moo, 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Spustelėkite mane!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Naujas QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Fiktyvi PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Fiktyvi PythonQt užduotis" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Tai yra fiktyvi PythonQt užduotis. Fiktyvi užduotis sako: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Fiktyvios PythonQt užduoties būsenos pranešimas." calamares-3.2.41.1/src/modules/dummypythonqt/lang/lv/000077500000000000000000000000001410275732300224375ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/000077500000000000000000000000001410275732300242245ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/lv/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022371410275732300275320ustar00rootroot00000000000000# 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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/mk/000077500000000000000000000000001410275732300224255ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/000077500000000000000000000000001410275732300242125ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/mk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025261410275732300275210ustar00rootroot00000000000000# 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: # Martin Ristovski , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Martin Ristovski , 2018\n" "Language-Team: Macedonian (https://www.transifex.com/calamares/teams/20061/mk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Кликни ме!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Нов QLabel." #: 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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/ml/000077500000000000000000000000001410275732300224265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/000077500000000000000000000000001410275732300242135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ml/LC_MESSAGES/dummypythonqt.po000066400000000000000000000025421410275732300275200ustar00rootroot00000000000000# 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: # Balasankar C , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-09-15 21:54+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Balasankar C , 2019\n" "Language-Team: Malayalam (https://www.transifex.com/calamares/teams/20061/ml/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ml\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 "ഒരു പുതിയ QLabel." #: 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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/mr/000077500000000000000000000000001410275732300224345ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/000077500000000000000000000000001410275732300242215ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/mr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021741410275732300275270ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Marathi (https://www.transifex.com/calamares/teams/20061/mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/nb/000077500000000000000000000000001410275732300224155ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/000077500000000000000000000000001410275732300242025ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/nb/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022061410275732300275040ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: nb\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/ne_NP/000077500000000000000000000000001410275732300230155ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/000077500000000000000000000000001410275732300246025ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ne_NP/LC_MESSAGES/dummypythonqt.po000066400000000000000000000033121410275732300301030ustar00rootroot00000000000000# 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: # Ghost Hackz , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-01-25 08:04-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ghost Hackz , 2019\n" "Language-Team: Nepali (Nepal) (https://www.transifex.com/calamares/teams/20061/ne_NP/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ne_NP\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 "नयाँ QLabel।" #: 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 "डमी पाइथन प्रकृयाको अवस्था सम्बन्धित सन्देश।" calamares-3.2.41.1/src/modules/dummypythonqt/lang/nl/000077500000000000000000000000001410275732300224275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/000077500000000000000000000000001410275732300242145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/nl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026441410275732300275240ustar00rootroot00000000000000# 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: # De Zeeappel , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: De Zeeappel , 2017\n" "Language-Team: Dutch (https://www.transifex.com/calamares/teams/20061/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klik mij!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Een nieuw QLabel" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "De Dummy PythonQt opdracht" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Dit is de Dummy PythonQt opdracht. De opdracht zegt: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Een statusbericht voor de Dummy PythonQt opdracht." calamares-3.2.41.1/src/modules/dummypythonqt/lang/pl/000077500000000000000000000000001410275732300224315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/000077500000000000000000000000001410275732300242165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031601410275732300275200ustar00rootroot00000000000000# 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: # Marcin Mikołajczak , 2016 # Piotr Strębski , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-05-10 19:18-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Piotr Strębski , 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Naciśnij mnie!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nowy QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Podgląd kroków fikcyjnego PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Zadanie fikcyjne PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "To jest zadanie fikcyjne PythonQt mówiące: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Wiadomość o stanie zadania fikcyjnego PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_BR/000077500000000000000000000000001410275732300230245ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/000077500000000000000000000000001410275732300246115ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_BR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027511410275732300301200ustar00rootroot00000000000000# 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: # Rodrigo de Almeida Sottomaior Macedo , 2017 # Guilherme, 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-01-25 23:02+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Guilherme, 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clique em mim!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uma nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "ViewStep do Modelo PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A Tarefa de Modelo PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a Tarefa Modelo PythonQt. A tarefa modelo diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Uma mensagem de status para a Tarefa Modelo PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_PT/000077500000000000000000000000001410275732300230445ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/000077500000000000000000000000001410275732300246315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/pt_PT/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027141410275732300301370ustar00rootroot00000000000000# 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: # Ricardo Simões , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Ricardo Simões , 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clique-me!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Uma nova QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "A Tarefa Dummy PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Esta é a tarefa Dummy PythonQt. A tarefa dummy diz: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Uma mensagem de estado para a Tarefa Dummy PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/ro/000077500000000000000000000000001410275732300224365ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/000077500000000000000000000000001410275732300242235ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ro/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027261410275732300275340ustar00rootroot00000000000000# 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: # Baadur Jobava , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Baadur Jobava , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Clic aici!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Un nou QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Un job job fictiv PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Acesta este jobul fictiv PythonQt. Descrierea jobului: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Un mesaj de stare pentru jobul fictiv PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/ru/000077500000000000000000000000001410275732300224445ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/000077500000000000000000000000001410275732300242315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ru/LC_MESSAGES/dummypythonqt.po000066400000000000000000000030651410275732300275370ustar00rootroot00000000000000# 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: # Вадим Сабынич , 2017 # Simon Schwartz , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Simon Schwartz , 2017\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Нажать здесь!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Новый QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "The Dummy PythonQt Job" #: 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 "Сообщение состояния для Dummy PythonQt Job." calamares-3.2.41.1/src/modules/dummypythonqt/lang/sk/000077500000000000000000000000001410275732300224335ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/000077500000000000000000000000001410275732300242205ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027541410275732300275320ustar00rootroot00000000000000# 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: # Dušan Kazik , 2016 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Dušan Kazik , 2016\n" "Language-Team: Slovak (https://www.transifex.com/calamares/teams/20061/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Kliknite sem!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Nová menovka QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Fiktívna úloha PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Toto je fiktívna úloha PythonQt. Fiktívna úloha hovorí: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Stavová správa pre fiktívnu úlohu PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/sl/000077500000000000000000000000001410275732300224345ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/000077500000000000000000000000001410275732300242215ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sl/LC_MESSAGES/dummypythonqt.po000066400000000000000000000022621410275732300275250ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Slovenian (https://www.transifex.com/calamares/teams/20061/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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/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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/sq/000077500000000000000000000000001410275732300224415ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/000077500000000000000000000000001410275732300242265ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sq/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026531410275732300275360ustar00rootroot00000000000000# 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: # Besnik Bleta , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-04-15 13:39+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\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" "Content-Transfer-Encoding: 8bit\n" "Language: sq\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klikomëni!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Një QLabel e re." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Dummy PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Akti PythonQt Dummy" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Ky është Akti PythonQt Dummy. Akti dummy thotë: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Një mesazh gjendjeje nga Akti PythonQt Dummy." calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr/000077500000000000000000000000001410275732300224425ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/000077500000000000000000000000001410275732300242275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr/LC_MESSAGES/dummypythonqt.po000066400000000000000000000031741410275732300275360ustar00rootroot00000000000000# 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: # Slobodan Simić , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-06-18 15:54+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Slobodan Simić , 2019\n" "Language-Team: Serbian (https://www.transifex.com/calamares/teams/20061/sr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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/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 "Порука стања за провизорни ПитонКуТ посао." calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr@latin/000077500000000000000000000000001410275732300235725ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/000077500000000000000000000000001410275732300253575ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sr@latin/LC_MESSAGES/dummypythonqt.po000066400000000000000000000023321410275732300306610ustar00rootroot00000000000000# 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: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Serbian (Latin) (https://www.transifex.com/calamares/teams/20061/sr@latin/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "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/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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/sv/000077500000000000000000000000001410275732300224465ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/000077500000000000000000000000001410275732300242335ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/sv/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026631410275732300275440ustar00rootroot00000000000000# 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: # Luna Jernberg , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-03-19 00:13+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Luna Jernberg , 2020\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" "Content-Transfer-Encoding: 8bit\n" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Klicka på mig!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "En ny QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Exempel PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Exempel PythonQt jobb" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Detta är ett exempel PythonQt jobb. Exempel jobbet säger: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Ett statusmeddelande för exempel PythonQt jobb." calamares-3.2.41.1/src/modules/dummypythonqt/lang/th/000077500000000000000000000000001410275732300224315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/th/LC_MESSAGES/000077500000000000000000000000001410275732300242165ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/th/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021621410275732300275210ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Thai (https://www.transifex.com/calamares/teams/20061/th/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: th\n" "Plural-Forms: nplurals=1; plural=0;\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/tr_TR/000077500000000000000000000000001410275732300230505ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/000077500000000000000000000000001410275732300246355ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/tr_TR/LC_MESSAGES/dummypythonqt.po000066400000000000000000000027021410275732300301400ustar00rootroot00000000000000# 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: # Demiray Muhterem , 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" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Demiray Muhterem , 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Buraya tıkla!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Yeni bir QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Sahte PythonQt görünümü" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Sahte PythonQt işleri" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Kukla PythonQt işleri. Sahte işleri şöyle diyor: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Kukla PythonQt Çalışması için bir durum mesajı." calamares-3.2.41.1/src/modules/dummypythonqt/lang/uk/000077500000000000000000000000001410275732300224355ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/000077500000000000000000000000001410275732300242225ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/uk/LC_MESSAGES/dummypythonqt.po000066400000000000000000000034221410275732300275250ustar00rootroot00000000000000# 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: # Yuri Chornoivan , 2020 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-19 17:27+0100\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: Yuri Chornoivan , 2020\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" "Content-Transfer-Encoding: 8bit\n" "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/dummypythonqt/main.py:84 msgid "Click me!" msgstr "Натисни мене!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "Нова QLabel." #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "Фіктивний ViewStep PythonQt" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "Фіктивне завдання PythonQt" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "Це фіктивне завдання PythonQt. Фіктивне завдання повідомляє: {}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "Повідомлення щодо стану фіктивного завдання PythonQt." calamares-3.2.41.1/src/modules/dummypythonqt/lang/ur/000077500000000000000000000000001410275732300224445ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/000077500000000000000000000000001410275732300242315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/ur/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021711410275732300275340ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Language-Team: Urdu (https://www.transifex.com/calamares/teams/20061/ur/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/uz/000077500000000000000000000000001410275732300224545ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/000077500000000000000000000000001410275732300242415ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/uz/LC_MESSAGES/dummypythonqt.po000066400000000000000000000021631410275732300275450ustar00rootroot00000000000000# 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: 2018-10-05 11:34-0400\n" "PO-Revision-Date: 2016-12-16 12:18+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/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 "" calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_CN/000077500000000000000000000000001410275732300230175ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/000077500000000000000000000000001410275732300246045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_CN/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026771410275732300301220ustar00rootroot00000000000000# 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: # Mingcong Bai , 2017 # soenggam , 2018 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-02-22 07:09-0500\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: soenggam , 2018\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" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "按我按我!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "一个新的QLabel。" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "坠吼滴 PythonQt ViewStep" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "PythonQt 任务" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "我是个 PythonQt 任务。任务提示:{}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "来自 PythonQt 任务的状态消息。" calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_TW/000077500000000000000000000000001410275732300230515ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/000077500000000000000000000000001410275732300246365ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/dummypythonqt/lang/zh_TW/LC_MESSAGES/dummypythonqt.po000066400000000000000000000026541410275732300301470ustar00rootroot00000000000000# 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: # 黃柏諺 , 2017 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-07-06 01:16+0200\n" "PO-Revision-Date: 2016-12-16 12:18+0000\n" "Last-Translator: 黃柏諺 , 2017\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" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/modules/dummypythonqt/main.py:84 msgid "Click me!" msgstr "點擊我!" #: src/modules/dummypythonqt/main.py:94 msgid "A new QLabel." msgstr "一個新的 QLabel。" #: src/modules/dummypythonqt/main.py:97 msgid "Dummy PythonQt ViewStep" msgstr "假的 PythonQt 檢視步驟" #: src/modules/dummypythonqt/main.py:183 msgid "The Dummy PythonQt Job" msgstr "假的 PythonQt 工作" #: src/modules/dummypythonqt/main.py:186 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" msgstr "這是一個假的 PythonQt 工作。假工作表示:{}" #: src/modules/dummypythonqt/main.py:190 msgid "A status message for Dummy PythonQt Job." msgstr "假的 PythonQt 工作的狀態訊息。" calamares-3.2.41.1/src/modules/dummypythonqt/main.py000066400000000000000000000200661410275732300223770ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2016-2017 Teo Mrnjavac # SPDX-FileCopyrightText: 2017 Alf Gaida # SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is Free Software: see the License-Identifier above. # import platform from PythonQt.QtGui import * import PythonQt.calamares as calamares # WARNING: the Calamares PythonQt API is considered EXPERIMENTAL as of # Calamares 2.5. It comes with no promise or commitment to API stability. # Set up translations. # You may skip this if your Calamares module has no user visible strings. # DO NOT install _ into the builtin namespace because each module loads # its own catalog. # DO use the gettext class-based API and manually alias _ as described in: # https://docs.python.org/3.5/library/gettext.html#localizing-your-module import gettext import inspect import os _filename = inspect.getframeinfo(inspect.currentframe()).filename _path = os.path.dirname(os.path.abspath(_filename)) _ = gettext.gettext # Example Python ViewModule. # A Python ViewModule is a Python program which defines a ViewStep class. # One UI module ==> one ViewStep. # This class must be marked with the @calamares_module decorator. A # ViewModule may define other classes, but only one may be decorated with # @calamares_module. Such a class must conform to the Calamares ViewStep # interface and functions as the entry point of the module. # A ViewStep manages one or more "wizard pages" through methods like # back/next, and reports its status through isNextEnabled/isBackEnabled/ # isAtBeginning/isAtEnd. The whole UI, including all the pages, must be # exposed as a single QWidget, returned by the widget function. # # For convenience, both C++ and PythonQt ViewSteps are considered to be # implementations of ViewStep.h. Additionally, the Calamares PythonQt API # allows Python developers to keep their identifiers more Pythonic on the # Python side. Thus, all of the following are considered valid method # identifiers in a ViewStep implementation: isNextEnabled, isnextenabled, # is_next_enabled. @calamares_module class DummyPythonQtViewStep: def __init__(self): # Importing PythonQt.QtGui provides access to most Qt widget classes. self.main_widget = QFrame() self.main_widget.setLayout(QVBoxLayout()) label = QLabel() self.main_widget.layout().addWidget(label) accumulator = "\nCalamares+PythonQt running embedded Python " +\ platform.python_version() label.text = accumulator btn = QPushButton() # Python strings can be used wherever a method wants a QString. Python # gettext translations can be used seamlessly as well. btn.setText(_("Click me!")) self.main_widget.layout().addWidget(btn) # The syntax for signal-slot connections is very simple, though # slightly different from the C++ equivalent. There are no SIGNAL and # SLOT macros, and a signal can be connected to any Python method # (without a special "slot" designation). btn.connect("clicked(bool)", self.on_btn_clicked) def on_btn_clicked(self): self.main_widget.layout().addWidget(QLabel(_("A new QLabel."))) def prettyName(self): return _("Dummy PythonQt ViewStep") def isNextEnabled(self): return True # The "Next" button should be clickable def isBackEnabled(self): return True # The "Back" button should be clickable def isAtBeginning(self): # True means the currently shown UI page is the first page of this # module, thus a "Back" button click will not be handled by this # module and will cause a skip to the previous ViewStep instead # (if any). False means that the present ViewStep provides other UI # pages placed logically "before" the current one, thus a "Back" button # click will be handled by this module instead of skipping to another # ViewStep. A module (ViewStep) with only one page will always return # True here. return True def isAtEnd(self): # True means the currently shown UI page is the last page of this # module, thus a "Next" button click will not be handled by this # module and will cause a skip to the next ViewStep instead (if any). # False means that the present ViewStep provides other UI pages placed # logically "after" the current one, thus a "Next" button click will # be handled by this module instead of skipping to another ViewStep. # A module (ViewStep) with only one page will always return True here. return True def jobs(self): # Returns a list of objects that implement Calamares::Job. return [DummyPQJob("Dummy PythonQt job reporting for duty")] def widget(self): # Returns the base QWidget of this module's UI. return self.main_widget def retranslate(self, locale_name): # This is where it gets slightly weird. In most desktop applications we # shouldn't need this kind of mechanism, because we could assume that # the operating environment is configured to use a certain language. # Usually the user would change the system-wide language in a settings # UI, restart the application, done. # Alas, Calamares runs on an unconfigured live system, and one of the # core features of Calamares is to allow the user to pick a language. # Unfortunately, strings in the UI do not automatically react to a # runtime language change. To get UI strings in a new language, all # user-visible strings must be retranslated (by calling tr() in C++ or # _() in Python) and reapplied on the relevant widgets. # When the user picks a new UI translation language, Qt raises a QEvent # of type LanguageChange, which propagates through the QObject # hierarchy. By catching and reacting to this event, we can show # user-visible strings in the new language at the right time. # The C++ side of the Calamares PythonQt API catches the LanguageChange # event and calls the present method. It is then up to the module # developer to add here all the needed code to load the module's # translation catalog for the new language (which is separate from the # main Calamares strings catalog) and reapply any user-visible strings. calamares.utils.debug("PythonQt retranslation event " "for locale name: {}".format(locale_name)) # First we load the catalog file for the new language... try: global _ _t = gettext.translation('dummypythonqt', localedir=os.path.join(_path, 'lang'), languages=[locale_name]) _ = _t.gettext except OSError as e: calamares.utils.debug(e) pass # ... and then we can call setText(_("foo")) and similar methods on # the relevant widgets here to reapply the strings. # An example Job class. Implements Calamares::Job. For method identifiers, the # same rules apply as for ViewStep. No decorators are necessary here, because # only the ViewStep implementation is the unique entry point, and a module can # have any number of jobs. class DummyPQJob: def __init__(self, my_msg): self.my_msg = my_msg def pretty_name(self): return _("The Dummy PythonQt Job") def pretty_description(self): return _("This is the Dummy PythonQt Job. " "The dummy job says: {}").format(self.my_msg) def pretty_status_message(self): return _("A status message for Dummy PythonQt Job.") def exec(self): # As an example, we touch a file in the target root filesystem. rmp = calamares.global_storage['rootMountPoint'] os.system("touch {}/calamares_dpqt_was_here".format(rmp)) calamares.utils.debug("the dummy job says {}".format(self.my_msg)) return {'ok': True} calamares-3.2.41.1/src/modules/dummypythonqt/module.desc000066400000000000000000000004261410275732300232240ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Module metadata file for dummy pythonqt jobmodule # Syntax is YAML 1.2 --- type: "view" name: "dummypythonqt" interface: "pythonqt" script: "main.py" #assumed relative to the current directory calamares-3.2.41.1/src/modules/finished/000077500000000000000000000000001410275732300177245ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/finished/CMakeLists.txt000066400000000000000000000010751410275732300224670ustar00rootroot00000000000000# === 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 ) calamares_add_plugin( finished TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Config.cpp FinishedViewStep.cpp FinishedPage.cpp UI FinishedPage.ui LINK_PRIVATE_LIBRARIES Qt5::DBus SHARED_LIB ) calamares-3.2.41.1/src/modules/finished/Config.cpp000066400000000000000000000162371410275732300216460ustar00rootroot00000000000000/* === 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 ); } calamares-3.2.41.1/src/modules/finished/Config.h000066400000000000000000000107661410275732300213140ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/finished/FinishedPage.cpp000066400000000000000000000107031410275732300227570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "FinishedPage.h" #include "Config.h" #include "ui_FinishedPage.h" #include "Branding.h" #include "Settings.h" #include "utils/Retranslator.h" #include FinishedPage::FinishedPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::FinishedPage ) { ui->setupUi( this ); ui->mainText->setAlignment( Qt::AlignCenter ); ui->mainText->setWordWrap( true ); ui->mainText->setOpenExternalLinks( true ); 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::focusInEvent( QFocusEvent* e ) { e->accept(); } void FinishedPage::onInstallationFailed( const QString& message, const QString& details ) { 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 ) ); } } } calamares-3.2.41.1/src/modules/finished/FinishedPage.h000066400000000000000000000016351410275732300224300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef FINISHEDPAGE_H #define FINISHEDPAGE_H #include #include class Config; namespace Ui { class FinishedPage; } class FinishedPage : public QWidget { Q_OBJECT public: explicit FinishedPage( Config* config, QWidget* parent = nullptr ); public slots: void onInstallationFailed( const QString& message, const QString& details ); void retranslate(); protected: void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus private: Ui::FinishedPage* ui; std::optional< QString > m_failure; }; #endif // FINISHEDPAGE_H calamares-3.2.41.1/src/modules/finished/FinishedPage.ui000066400000000000000000000072121410275732300226130ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later FinishedPage 0 0 593 400 Form Qt::Vertical QSizePolicy::Fixed 20 20 Qt::Vertical 20 50 3 0 <Calamares finished text> Qt::Vertical QSizePolicy::Fixed 20 49 Qt::Horizontal 40 20 <Restart checkbox tooltip> &Restart now false Qt::Horizontal 40 20 Qt::Vertical QSizePolicy::Expanding 20 20 calamares-3.2.41.1/src/modules/finished/FinishedViewStep.cpp000066400000000000000000000037631410275732300236610ustar00rootroot00000000000000/* === 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-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "FinishedViewStep.h" #include "Config.h" #include "FinishedPage.h" #include "JobQueue.h" #include FinishedViewStep::FinishedViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( new FinishedPage( m_config ) ) { auto jq = Calamares::JobQueue::instance(); connect( jq, &Calamares::JobQueue::failed, m_config, &Config::onInstallationFailed ); connect( jq, &Calamares::JobQueue::failed, m_widget, &FinishedPage::onInstallationFailed ); emit nextStatusChanged( true ); } FinishedViewStep::~FinishedViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString FinishedViewStep::prettyName() const { return tr( "Finish" ); } QWidget* FinishedViewStep::widget() { return m_widget; } bool FinishedViewStep::isNextEnabled() const { return false; } bool FinishedViewStep::isBackEnabled() const { return false; } bool FinishedViewStep::isAtBeginning() const { return true; } bool FinishedViewStep::isAtEnd() const { return true; } void FinishedViewStep::onActivate() { m_config->doNotify(); connect( qApp, &QApplication::aboutToQuit, m_config, qOverload<>( &Config::doRestart ) ); } Calamares::JobList FinishedViewStep::jobs() const { return Calamares::JobList(); } void FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( FinishedViewStepFactory, registerPlugin< FinishedViewStep >(); ) calamares-3.2.41.1/src/modules/finished/FinishedViewStep.h000066400000000000000000000023061410275732300233160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef FINISHEDVIEWSTEP_H #define FINISHEDVIEWSTEP_H #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" class Config; class FinishedPage; class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit FinishedViewStep( QObject* parent = nullptr ); ~FinishedViewStep() override; QString prettyName() const override; QWidget* widget() 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; private: Config* m_config; FinishedPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( FinishedViewStepFactory ) #endif calamares-3.2.41.1/src/modules/finished/finished.conf000066400000000000000000000034311410275732300223650ustar00rootroot00000000000000# 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). --- # DEPRECATED # # The finished page can hold a "restart system now" checkbox. # If this is false, no checkbox is shown and the system is not restarted # when Calamares exits. # restartNowEnabled: true # DEPRECATED # # Initial state of the checkbox "restart now". Only relevant when the # checkbox is shown by restartNowEnabled. # restartNowChecked: false # Behavior of the "restart system now" button. # # There are four usable values: # - never # Does not show the button and does not restart. # This matches the old behavior with restartNowEnabled=false. # - user-unchecked # Shows the button, defaults to unchecked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=false. # - user-checked # Shows the button, defaults to checked, restarts if it is checked. # This matches the old behavior with restartNowEnabled=true and restartNowChecked=true. # - always # Shows the button, checked, but the user cannot change it. # This is new behavior. # # The three combinations of legacy values are still supported. restartNowMode: user-unchecked # If the checkbox is shown, and the checkbox is checked, then when # Calamares exits from the finished-page it will run this command. # If not set, falls back to "shutdown -r now". restartNowCommand: "systemctl -i reboot" # When the last page is (successfully) reached, send a DBus notification # to the desktop that the installation is done. This works only if the # user as whom Calamares is run, can reach the regular desktop session bus. notifyOnFinished: false calamares-3.2.41.1/src/modules/finished/finished.schema.yaml000066400000000000000000000010751410275732300236430ustar00rootroot00000000000000# 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 } calamares-3.2.41.1/src/modules/finishedq/000077500000000000000000000000001410275732300201055ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/finishedq/CMakeLists.txt000066400000000000000000000015331410275732300226470ustar00rootroot00000000000000# === 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 ) calamares-3.2.41.1/src/modules/finishedq/FinishedQmlViewStep.cpp000066400000000000000000000036131410275732300245060ustar00rootroot00000000000000/* === 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 ); } calamares-3.2.41.1/src/modules/finishedq/FinishedQmlViewStep.h000066400000000000000000000025221410275732300241510ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/finishedq/finishedq.conf000066400000000000000000000027401410275732300227310ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/finishedq/finishedq.qml000066400000000000000000000052151410275732300225750ustar00rootroot00000000000000/* === 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() { } } calamares-3.2.41.1/src/modules/finishedq/finishedq.qrc000066400000000000000000000001631410275732300225660ustar00rootroot00000000000000 finishedq.qml seedling.svg calamares-3.2.41.1/src/modules/finishedq/seedling.svg000066400000000000000000000006001410275732300224140ustar00rootroot00000000000000 calamares-3.2.41.1/src/modules/finishedq/seedling.svg.license000066400000000000000000000001441410275732300240400ustar00rootroot00000000000000SPDX-FileCopyrightText: 2021 FontAwesome SPDX-License-Identifier: CC-BY-4.0 calamares-3.2.41.1/src/modules/fsresizer/000077500000000000000000000000001410275732300201475ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/fsresizer/CMakeLists.txt000066400000000000000000000025221410275732300227100ustar00rootroot00000000000000# === 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 ) 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 ) # 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 TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ResizeFSJob.cpp LINK_PRIVATE_LIBRARIES kpmcore COMPILE_DEFINITIONS ${KPMcore_API_DEFINITIONS} SHARED_LIB ) calamares_add_test( fsresizertest SOURCES Tests.cpp LIBRARIES calamares_job_fsresizer # From above yamlcpp::yamlcpp DEFINITIONS ${KPMcore_API_DEFINITIONS} ) else() if ( NOT KPMcore_FOUND ) calamares_skip_module( "fsresizer (missing suitable KPMcore)" ) else() calamares_skip_module( "fsresizer (missing dependencies for KPMcore)" ) endif() endif() calamares-3.2.41.1/src/modules/fsresizer/ResizeFSJob.cpp000066400000000000000000000221341410275732300230020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ResizeFSJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include "utils/Units.h" #include "utils/Variant.h" #include #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; ResizeFSJob::ResizeFSJob( QObject* parent ) : Calamares::CppJob( parent ) , m_required( false ) { } ResizeFSJob::~ResizeFSJob() {} QString ResizeFSJob::prettyName() const { return tr( "Resize Filesystem Job" ); } ResizeFSJob::PartitionMatch ResizeFSJob::findPartition() { using DeviceList = QList< Device* >; #if defined( WITH_KPMCORE4API ) DeviceList devices = m_kpmcore.backend()->scanDevices( /* not includeReadOnly, not includeLoopback */ ScanFlag( 0 ) ); #else DeviceList devices = m_kpmcore.backend()->scanDevices( /* excludeReadOnly */ true ); #endif 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 ) { 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 ); } } } cDebug() << "No match for configuration dev=" << m_devicename << "fs=" << m_fsname; return PartitionMatch( nullptr, nullptr ); } /** @brief Returns the last sector the matched partition should occupy. * * Returns a sector number. Returns -1 if something is wrong (e.g. * can't resize at all, or missing data). Returns 0 if the resize * won't fit because it doesn't satisfy the settings for atleast * and size (or won't grow at all because the partition is blocked * by occupied space after it). */ 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 qint64 last_currently = m.second->lastSector(); cDebug() << "Growing partition" << m.second->firstSector() << '-' << last_currently; for ( auto part_it = PartitionIterator::begin( m.first ); part_it != PartitionIterator::end( m.first ); ++part_it ) { qint64 next_start = ( *part_it )->firstSector(); qint64 next_end = ( *part_it )->lastSector(); if ( next_start > next_end ) { cWarning() << "Corrupt partition has end" << next_end << " < start" << next_start; std::swap( next_start, next_end ); } if ( ( *part_it )->roles().has( PartitionRole::Unallocated ) ) { cDebug() << Logger::SubEntry << "ignoring unallocated" << next_start << '-' << next_end; continue; } cDebug() << Logger::SubEntry << "comparing" << next_start << '-' << next_end; if ( ( next_start > last_currently ) && ( next_start < last_available ) ) { cDebug() << Logger::SubEntry << "shrunk last available to" << next_start; last_available = next_start - 1; // Before that one starts } } if ( !( last_available > last_currently ) ) { cDebug() << "Partition cannot grow larger."; return 0; } qint64 expand = last_available - last_currently; // number of sectors if ( m_atleast.isValid() ) { qint64 required = m_atleast.toSectors( m.first->totalLogical(), m.first->logicalSize() ); if ( expand < required ) { cDebug() << Logger::SubEntry << "need to expand by" << required << "but only" << expand << "is available."; return 0; } } qint64 wanted = m_size.toSectors( expand, m.first->logicalSize() ); if ( wanted < expand ) { cDebug() << Logger::SubEntry << "only growing by" << wanted << "instead of full" << expand; last_available -= ( expand - wanted ); } return last_available; } Calamares::JobResult ResizeFSJob::exec() { if ( !isValid() ) return Calamares::JobResult::error( tr( "Invalid configuration" ), tr( "The file-system resize job has an invalid configuration and will not run." ) ); 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." ) ); } m_kpmcore.backend()->initFSSupport(); // Might not be enough, see below // Now get the partition and FS we want to work on PartitionMatch m = findPartition(); 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.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 ) ); } qint64 new_end = findGrownEnd( m ); 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 ) ); if ( new_end == 0 ) { cWarning() << "Resize operation on" << m_fsname << m_devicename << "skipped as not-useful."; if ( m_required ) return Calamares::JobResult::error( tr( "Resize Failed" ), !m_fsname.isEmpty() ? tr( "The filesystem %1 must be resized, but cannot." ).arg( m_fsname ) : tr( "The device %1 must be resized, but cannot" ).arg( m_fsname ) ); return Calamares::JobResult::ok(); } if ( ( new_end > 0 ) && ( new_end > m.second->lastSector() ) ) { 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::ok(); } void ResizeFSJob::setConfigurationMap( const QVariantMap& configurationMap ) { m_fsname = configurationMap[ "fs" ].toString(); m_devicename = configurationMap[ "dev" ].toString(); if ( m_fsname.isEmpty() && m_devicename.isEmpty() ) { cWarning() << "No fs or dev configured for resize."; return; } 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< ResizeFSJob >(); ) calamares-3.2.41.1/src/modules/fsresizer/ResizeFSJob.h000066400000000000000000000035771410275732300224610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef RESIZEFSJOB_H #define RESIZEFSJOB_H #include #include #include "CppJob.h" #include "partition/KPMManager.h" #include "partition/PartitionSize.h" #include "utils/PluginFactory.h" #include "DllMacro.h" class CoreBackend; // From KPMCore class Device; // From KPMCore class Partition; using PartitionSize = CalamaresUtils::Partition::PartitionSize; class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob { Q_OBJECT public: explicit ResizeFSJob( QObject* parent = nullptr ); ~ResizeFSJob() override; QString prettyName() const override; Calamares::JobResult exec() override; 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(); } QString name() const { return m_fsname.isEmpty() ? m_devicename : m_fsname; } PartitionSize size() const { return m_size; } PartitionSize minimumSize() const { return m_atleast; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; PartitionSize m_size; PartitionSize m_atleast; QString m_fsname; // Either this, or devicename, is set, not both QString m_devicename; bool m_required; using PartitionMatch = QPair< Device*, Partition* >; /** @brief Find the configured FS */ PartitionMatch findPartition(); /** @brief Return a new end-sector for the given dev-part pair. */ qint64 findGrownEnd( PartitionMatch ); }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ResizeFSJobFactory ) #endif // RESIZEFSJOB_H calamares-3.2.41.1/src/modules/fsresizer/Tests.cpp000066400000000000000000000063361410275732300217650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Tests.h" #include "ResizeFSJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include using SizeUnit = CalamaresUtils::Partition::SizeUnit; QTEST_GUILESS_MAIN( FSResizerTests ) FSResizerTests::FSResizerTests() {} FSResizerTests::~FSResizerTests() {} void FSResizerTests::initTestCase() { } void FSResizerTests::testConfigurationRobust() { ResizeFSJob j; // Empty config j.setConfigurationMap( QVariantMap() ); QVERIFY( j.name().isEmpty() ); QCOMPARE( j.size().unit(), SizeUnit::None ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); // Config is missing fs and dev, so it isn't valid YAML::Node doc0 = YAML::Load( R"(--- size: 100% atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( j.name().isEmpty() ); QCOMPARE( j.size().unit(), SizeUnit::None ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 0 ); QCOMPARE( j.minimumSize().value(), 0 ); } void FSResizerTests::testConfigurationValues() { ResizeFSJob j; // Check both YAML::Node doc0 = YAML::Load( R"(--- fs: / size: 100% atleast: 600MiB )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::Percent ); QCOMPARE( j.minimumSize().unit(), SizeUnit::MiB ); QCOMPARE( j.size().value(), 100 ); QCOMPARE( j.minimumSize().value(), 600 ); // Silly config has bad atleast value doc0 = YAML::Load( R"(--- fs: / dev: /dev/m00 size: 72 MiB atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); QCOMPARE( j.minimumSize().value(), 0 ); // Silly config has bad atleast value doc0 = YAML::Load( R"(--- dev: /dev/m00 size: 72 MiB atleast: 127 % )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString( "/dev/m00" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 72 ); QCOMPARE( j.minimumSize().value(), 0 ); // Normal config doc0 = YAML::Load( R"(--- fs: / # dev: /dev/m00 size: 71MiB # atleast: 127% )" ); j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ) ); QVERIFY( !j.name().isEmpty() ); QCOMPARE( j.name(), QString( "/" ) ); QCOMPARE( j.size().unit(), SizeUnit::MiB ); QCOMPARE( j.minimumSize().unit(), SizeUnit::None ); QCOMPARE( j.size().value(), 71 ); QCOMPARE( j.minimumSize().value(), 0 ); } calamares-3.2.41.1/src/modules/fsresizer/Tests.h000066400000000000000000000011571410275732300214260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef TESTS_H #define TESTS_H #include class FSResizerTests : public QObject { Q_OBJECT public: FSResizerTests(); ~FSResizerTests() override; private Q_SLOTS: void initTestCase(); // Can handle missing values void testConfigurationRobust(); // Can parse % and MiB values void testConfigurationValues(); }; #endif calamares-3.2.41.1/src/modules/fsresizer/fsresizer.conf000066400000000000000000000036171410275732300230410ustar00rootroot00000000000000# 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, # after which the FS should expand to fill the SD card. # # Example: a distro produces a 6GiB large image that is # written to an 8GiB SD card; the FS should expand to take # advantage of the unused 2GiB. The FS should expand much # more if the same image is written to a 16GiB card. --- # Which FS needs to be grown? Choose one way to identify it: # - *fs* names a mount point which should already be mounted # in the system. # - *dev* names a device fs: / # dev: /dev/mmcblk0p1 # How much of the total remaining space should the FS use? # The only sensible amount is "all of it". The value is # in percent, so set it to 100. Perhaps a fixed size is # needed (that would be weird though, since you don't know # how big the card is), use MiB as suffix in that case. # If missing, then it's assumed to be 0, and no resizing # will happen. # # Percentages apply to **available space**. size: 100% # Resizing might not be worth it, though. Set the minimum # that it must grow; if it cannot grow that much, the # resizing is skipped. Can be in percentage or absolute # size, as above. If missing, then it's assumed to be 0, # which means resizing is always worthwhile. # # If *atleast* is not zero, then the setting *required*, # below, becomes relevant. # # Percentages apply to **total device size**. #atleast: 1000MiB # When *atleast* is not zero, then the resize may be # recommended (the default) or **required**. If the # resize is required and cannot be carried out (because # there's not enough space), then that is a fatal # error for the installer. By default, resize is only # recommended and it is not an error for no resize to be # carried out. required: false calamares-3.2.41.1/src/modules/fstab/000077500000000000000000000000001410275732300172325ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/fstab/fstab.conf000066400000000000000000000035131410275732300212020ustar00rootroot00000000000000# 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. # # When creating fstab entries for a filesystem, this module # uses the options for the filesystem type to write to the # options field of the file. --- # 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. mountOptions: default: defaults,noatime btrfs: defaults,noatime,space_cache,autodefrag # 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, # *default* from *mountOptions*. 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 only lzo compression to btrfs # and does nothing for other filesystems. ssdExtraMountOptions: btrfs: compress=lzo # Additional options added to each line in /etc/crypttab crypttabOptions: luks # For Debian and Debian-based distributions, change the above line to: # crypttabOptions: luks,keyscript=/bin/cat calamares-3.2.41.1/src/modules/fstab/fstab.schema.yaml000066400000000000000000000015671410275732300224650ustar00rootroot00000000000000# 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 } efiMountOptions: { type: string } crypttabOptions: { type: string } required: [ mountOptions ] calamares-3.2.41.1/src/modules/fstab/main.py000066400000000000000000000355571410275732300205470ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import os import re import subprocess import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Writing fstab.") FSTAB_HEADER = """# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a device; this may # be used with UUID= as a more robust way to name devices that works even if # disks are added and removed. See fstab(5). # # """ CRYPTTAB_HEADER = """# /etc/crypttab: mappings for encrypted partitions. # # Each mapped device will be created in /dev/mapper, so your /etc/fstab # should use the /dev/mapper/ paths for encrypted devices. # # See crypttab(5) for the supported syntax. # # NOTE: Do not list your root (/) partition here, 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. # # """ # Turn Parted filesystem names into fstab names FS_MAP = { "fat16": "vfat", "fat32": "vfat", "linuxswap": "swap", } def mkdir_p(path): """ Create directory. :param path: """ if not os.path.exists(path): os.makedirs(path) def is_ssd_disk(disk_name): """ Checks if given disk is actually a ssd disk. :param disk_name: :return: """ filename = os.path.join("/sys/block", disk_name, "queue/rotational") if not os.path.exists(filename): # Should not happen unless sysfs changes, but better safe than sorry return False with open(filename) as sysfile: return sysfile.read() == "0\n" def disk_name_for_partition(partition): """ Returns disk name for each found partition. :param partition: :return: """ name = os.path.basename(partition["device"]) if name.startswith("/dev/mmcblk") or name.startswith("/dev/nvme"): return re.sub("p[0-9]+$", "", name) return re.sub("[0-9]+$", "", name) class FstabGenerator(object): """ Class header :param partitions: :param root_mount_point: :param mount_options: :param ssd_extra_mount_options: """ def __init__(self, partitions, root_mount_point, mount_options, ssd_extra_mount_options, crypttab_options): self.partitions = partitions self.root_mount_point = root_mount_point self.mount_options = mount_options self.ssd_extra_mount_options = ssd_extra_mount_options self.crypttab_options = crypttab_options self.ssd_disks = set() self.root_is_ssd = False def run(self): """ Calls needed sub routines. :return: """ self.find_ssd_disks() self.generate_fstab() self.generate_crypttab() self.create_mount_points() return None def find_ssd_disks(self): """ Checks for ssd disks """ disks = {disk_name_for_partition(x) for x in self.partitions} self.ssd_disks = {x for x in disks if is_ssd_disk(x)} def generate_crypttab(self): """ Create crypttab. """ mkdir_p(os.path.join(self.root_mount_point, "etc")) crypttab_path = os.path.join(self.root_mount_point, "etc", "crypttab") with open(crypttab_path, "w") as crypttab_file: print(CRYPTTAB_HEADER, file=crypttab_file) for partition in self.partitions: dct = self.generate_crypttab_line_info(partition) if dct: self.print_crypttab_line(dct, file=crypttab_file) def generate_crypttab_line_info(self, partition): """ Generates information for each crypttab entry. """ if "luksMapperName" not in partition or "luksUuid" not in partition: return None mapper_name = partition["luksMapperName"] luks_uuid = partition["luksUuid"] if not mapper_name or not luks_uuid: return None return dict( name=mapper_name, device="UUID=" + luks_uuid, password="/crypto_keyfile.bin", options=self.crypttab_options, ) def print_crypttab_line(self, dct, file=None): """ Prints line to '/etc/crypttab' file. """ line = "{:21} {:<45} {} {}".format(dct["name"], dct["device"], dct["password"], dct["options"], ) print(line, file=file) def generate_fstab(self): """ Create fstab. """ mkdir_p(os.path.join(self.root_mount_point, "etc")) fstab_path = os.path.join(self.root_mount_point, "etc", "fstab") with open(fstab_path, "w") as fstab_file: print(FSTAB_HEADER, file=fstab_file) for partition in self.partitions: # Special treatment for a btrfs subvolumes if (partition["fs"] == "btrfs" and partition["mountPoint"] == "/"): # 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) else: dct = self.generate_fstab_line_info(partition) if dct: self.print_fstab_line(dct, file=fstab_file) if self.root_is_ssd: # Mount /tmp on a tmpfs dct = dict(device="tmpfs", mount_point="/tmp", fs="tmpfs", options="defaults,noatime,mode=1777", check=0, ) self.print_fstab_line(dct, file=fstab_file) def generate_fstab_line_info(self, partition): """ Generates information (a dictionary of fstab-fields) for the given @p partition. """ # 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 mount_point = partition["mountPoint"] disk_name = disk_name_for_partition(partition) is_ssd = disk_name in self.ssd_disks # Swap partitions are called "linuxswap" by parted. # That "fs" is visible in GS, but that gets mapped # to "swap", above, because that's the spelling needed in /etc/fstab if not mount_point and not filesystem == "swap": return None if not mount_point: mount_point = "swap" if filesystem == "swap" and not partition.get("claimed", None): 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 is_ssd: extra = self.ssd_extra_mount_options.get(filesystem) if extra: options += "," + extra if mount_point == "/": check = 1 elif mount_point and mount_point != "swap": check = 2 else: check = 0 if mount_point == "/": self.root_is_ssd = is_ssd if filesystem == "btrfs" and "subvol" in partition: options = "subvol={},".format(partition["subvol"]) + options if has_luks: device = "/dev/mapper/" + partition["luksMapperName"] elif partition["uuid"] is not None: device = "UUID=" + partition["uuid"] else: device = partition["device"] return dict(device=device, mount_point=mount_point, fs=filesystem, options=options, check=check, ) def print_fstab_line(self, dct, file=None): """ Prints line to '/etc/fstab' file. """ line = "{:41} {:<14} {:<7} {:<10} 0 {}".format(dct["device"], dct["mount_point"], dct["fs"], dct["options"], dct["check"], ) print(line, file=file) def create_mount_points(self): """ Creates mount points """ for partition in self.partitions: if partition["mountPoint"]: mkdir_p(self.root_mount_point + partition["mountPoint"]) def get_mount_options(self, filesystem, mount_point): efiMountPoint = libcalamares.globalstorage.value("efiSystemPartition") job_config = libcalamares.job.configuration if (mount_point == efiMountPoint and "efiMountOptions" in job_config): return job_config["efiMountOptions"] return self.mount_options.get(filesystem, 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. :return: """ global_storage = libcalamares.globalstorage conf = libcalamares.job.configuration partitions = global_storage.value("partitions") root_mount_point = global_storage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}" .format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use.") .format("fstab")) 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("fstab")) # 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) 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) calamares-3.2.41.1/src/modules/fstab/module.desc000066400000000000000000000002251410275732300213560ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "fstab" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/fstab/test.yaml000066400000000000000000000006561410275732300211040ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 rootMountPoint: /tmp/mount partitions: - device: /dev/sda1 fs: ext4 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 calamares-3.2.41.1/src/modules/grubcfg/000077500000000000000000000000001410275732300175525ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/grubcfg/grubcfg.conf000066400000000000000000000030461410275732300220430ustar00rootroot00000000000000# 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 # on calculated values and the values set in the *defaults* key # in this configuration file. # # Calculated values are: # - GRUB_DISTRIBUTOR, branding module, *bootloaderEntryName* (this # string is sanitized, and see also setting *keepDistributor*) # - GRUB_ENABLE_CRYPTODISK, based on the presence of filesystems # that use LUKS # - GRUB_CMDLINE_LINUX_DEFAULT, adding LUKS setup and plymouth # support to the kernel. --- # If set to true, always creates /etc/default/grub from scratch even if the file # 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). keepDistributor: false # Default entries to write to /etc/default/grub if it does not exist yet or if # we are overwriting it. # defaults: GRUB_TIMEOUT: 5 GRUB_DEFAULT: "saved" GRUB_DISABLE_SUBMENU: true GRUB_TERMINAL_OUTPUT: "console" GRUB_DISABLE_RECOVERY: true calamares-3.2.41.1/src/modules/grubcfg/grubcfg.schema.yaml000066400000000000000000000015461410275732300233220ustar00rootroot00000000000000# 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 } keepDistributor: { type: boolean, default: false } prefer_grub_d: { type: boolean, default: false } 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 ] calamares-3.2.41.1/src/modules/grubcfg/main.py000066400000000000000000000240041410275732300210500ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares import os import re import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext 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 modify_grub_default(partitions, root_mount_point, distributor): """ Configures '/etc/default/grub' for hibernation and plymouth. @see bootloader/main.py, for similar handling of kernel parameters :param partitions: :param root_mount_point: :param distributor: name of the distributor to fill in for GRUB_DISTRIBUTOR. Must be a string. If the job setting *keepDistributor* is set, then this is only used if no GRUB_DISTRIBUTOR is found at all (otherwise, when *keepDistributor* is set, the GRUB_DISTRIBUTOR lines are left unchanged). If *keepDistributor* is unset or false, then GRUB_DISTRIBUTOR is always updated to set this value. :return: """ default_grub = get_grub_config_path(root_mount_point) distributor_replace = distributor.replace("'", "'\\''") dracut_bin = libcalamares.utils.target_env_call( ["sh", "-c", "which dracut"] ) plymouth_bin = libcalamares.utils.target_env_call( ["sh", "-c", "which plymouth"] ) # Shell exit value 0 means success have_plymouth = plymouth_bin == 0 have_dracut = dracut_bin == 0 use_splash = "" swap_uuid = "" 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) for partition in partitions: if partition["mountPoint"] in ("/", "/boot") and partition["fs"] in ("btrfs", "f2fs"): no_save_default = True break if have_plymouth: use_splash = "splash" cryptdevice_params = [] if have_dracut: for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if (partition["fs"] == "linuxswap" and has_luks): swap_outer_uuid = partition["luksUuid"] swap_outer_mappername = partition["luksMapperName"] if (partition["mountPoint"] == "/" and has_luks): cryptdevice_params = [ "rd.luks.uuid={!s}".format(partition["luksUuid"]) ] else: for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue has_luks = "luksMapperName" in partition if partition["fs"] == "linuxswap" and not has_luks: swap_uuid = partition["uuid"] if (partition["fs"] == "linuxswap" and has_luks): swap_outer_mappername = partition["luksMapperName"] if (partition["mountPoint"] == "/" and has_luks): cryptdevice_params = [ "cryptdevice=UUID={!s}:{!s}".format( partition["luksUuid"], partition["luksMapperName"] ), "root=/dev/mapper/{!s}".format( partition["luksMapperName"] ) ] kernel_params = ["quiet"] if cryptdevice_params: kernel_params.extend(cryptdevice_params) if use_splash: kernel_params.append(use_splash) if swap_uuid: kernel_params.append("resume=UUID={!s}".format(swap_uuid)) if have_dracut and swap_outer_uuid: kernel_params.append("rd.luks.uuid={!s}".format(swap_outer_uuid)) if swap_outer_mappername: kernel_params.append("resume=/dev/mapper/{!s}".format( swap_outer_mappername)) distributor_line = "GRUB_DISTRIBUTOR='{!s}'".format(distributor_replace) have_kernel_cmd = False have_distributor_line = False if "overwrite" in libcalamares.job.configuration: overwrite = libcalamares.job.configuration["overwrite"] else: overwrite = False if os.path.exists(default_grub) and not overwrite: with open(default_grub, 'r') as grub_file: lines = [x.strip() for x in grub_file.readlines()] for i in range(len(lines)): if lines[i].startswith("#GRUB_CMDLINE_LINUX_DEFAULT"): kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines[i] = kernel_cmd have_kernel_cmd = True elif lines[i].startswith("GRUB_CMDLINE_LINUX_DEFAULT"): regex = re.compile(r"^GRUB_CMDLINE_LINUX_DEFAULT\s*=\s*") line = regex.sub("", lines[i]) line = line.lstrip() line = line.lstrip("\"") line = line.lstrip("'") line = line.rstrip() line = line.rstrip("\"") line = line.rstrip("'") existing_params = line.split() for existing_param in existing_params: existing_param_name = existing_param.split("=")[0] # the only ones we ever add if existing_param_name not in [ "quiet", "resume", "splash"]: kernel_params.append(existing_param) kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines[i] = kernel_cmd have_kernel_cmd = True elif (lines[i].startswith("#GRUB_DISTRIBUTOR") or lines[i].startswith("GRUB_DISTRIBUTOR")): if libcalamares.job.configuration.get("keepDistributor", False): lines[i] = distributor_line have_distributor_line = True else: # We're not updating because of *keepDistributor*, but if # this was a comment line, then it's still not been set. have_distributor_line = have_distributor_line or not lines[i].startswith("#") # If btrfs or f2fs is used, don't save default if no_save_default and lines[i].startswith("GRUB_SAVEDEFAULT="): lines[i] = "#GRUB_SAVEDEFAULT=\"true\"" else: lines = [] if "defaults" in libcalamares.job.configuration: for key, value in libcalamares.job.configuration[ "defaults"].items(): if value.__class__.__name__ == "bool": if value: escaped_value = "true" else: escaped_value = "false" else: escaped_value = str(value).replace("'", "'\\''") lines.append("{!s}='{!s}'".format(key, escaped_value)) if not have_kernel_cmd: kernel_cmd = "GRUB_CMDLINE_LINUX_DEFAULT=\"{!s}\"".format( " ".join(kernel_params) ) lines.append(kernel_cmd) if not have_distributor_line: lines.append(distributor_line) if cryptdevice_params and not unencrypted_separate_boot: lines.append("GRUB_ENABLE_CRYPTODISK=y") with open(default_grub, 'w') as grub_file: grub_file.write("\n".join(lines) + "\n") return None def run(): """ Calls routine with given parameters to modify '/etc/default/grub'. :return: """ fw_type = libcalamares.globalstorage.value("firmwareType") if (libcalamares.globalstorage.value("bootLoader") is None and fw_type != "efi"): return None partitions = libcalamares.globalstorage.value("partitions") if fw_type == "efi": esp_found = False for partition in partitions: if (partition["mountPoint"] == libcalamares.globalstorage.value("efiSystemPartition")): esp_found = True if not esp_found: return None root_mount_point = libcalamares.globalstorage.value("rootMountPoint") branding = libcalamares.globalstorage.value("branding") distributor = branding["bootloaderEntryName"] return modify_grub_default(partitions, root_mount_point, distributor) calamares-3.2.41.1/src/modules/grubcfg/module.desc000066400000000000000000000002271410275732300217000ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "grubcfg" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/grubcfg/tests/000077500000000000000000000000001410275732300207145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/grubcfg/tests/1.global000066400000000000000000000001201410275732300222270ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- bogus: true calamares-3.2.41.1/src/modules/grubcfg/tests/2.global000066400000000000000000000003341410275732300222370ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- bogus: true firmwareType: bios bootLoader: grub rootMountPoint: /tmp/calamares/grubcfg-test-2 branding: bootloaderEntryName: generic partitions: [] calamares-3.2.41.1/src/modules/grubcfg/tests/2.job000066400000000000000000000004061410275732300215510ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- overwrite: true keepDistributor: false defaults: GRUB_TIMEOUT: 5 GRUB_DEFAULT: "saved" GRUB_DISABLE_SUBMENU: true GRUB_TERMINAL_OUTPUT: "console" GRUB_DISABLE_RECOVERY: true calamares-3.2.41.1/src/modules/grubcfg/tests/3.global000066400000000000000000000003341410275732300222400ustar00rootroot00000000000000# 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: [] calamares-3.2.41.1/src/modules/grubcfg/tests/3.job000066400000000000000000000004621410275732300215540ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/grubcfg/tests/4.global000066400000000000000000000003341410275732300222410ustar00rootroot00000000000000# 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: [] calamares-3.2.41.1/src/modules/grubcfg/tests/4.job000066400000000000000000000004321410275732300215520ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/grubcfg/tests/CMakeTests.txt000066400000000000000000000013561410275732300234650ustar00rootroot00000000000000# 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) calamares-3.2.41.1/src/modules/hostinfo/000077500000000000000000000000001410275732300177645ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/hostinfo/CMakeLists.txt000066400000000000000000000025141410275732300225260ustar00rootroot00000000000000# === 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. # # Hostinfo puts information about the host system into Calamares # GlobalStorage. This information is generally unchanging. Put # this module somewhere early in the exec: section to pick up # the variables. Use a contextualprocess module later to # react to the values, if needed. # # GlobalStorage keys: # # - *hostOS* the OS this module was built under; value is "Linux" or # "FreeBSD" or blank. # - *hostOSName* the NAME value from /etc/os-release if it exists, # otherwise the same as *hostOS*. # - *hostCPU* the make (brand) of the CPU, if it can be determined. # Values are "Intel" or "AMD" or blank. calamares_add_plugin( hostinfo TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES HostInfoJob.cpp SHARED_LIB NO_CONFIG ) if ( KF5CoreAddons_FOUND AND KF5CoreAddons_VERSION VERSION_GREATER_EQUAL 5.58 ) target_compile_definitions( calamares_job_hostinfo PRIVATE WITH_KOSRelease ) endif() calamares_add_test( hostinfotest SOURCES Tests.cpp HostInfoJob.cpp LIBRARIES yamlcpp::yamlcpp ) calamares-3.2.41.1/src/modules/hostinfo/HostInfoJob.cpp000066400000000000000000000105531410275732300226600ustar00rootroot00000000000000/* === 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 "HostInfoJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #ifdef WITH_KOSRelease #include #endif #ifdef Q_OS_FREEBSD #include #include #endif HostInfoJob::HostInfoJob( QObject* parent ) : Calamares::CppJob( parent ) { } HostInfoJob::~HostInfoJob() {} QString HostInfoJob::prettyName() const { return tr( "Collecting information about your machine." ); } QString hostOS() { #if defined( Q_OS_FREEBSD ) return QStringLiteral( "FreeBSD" ); #elif defined( Q_OS_LINUX ) return QStringLiteral( "Linux" ); #else return QStringLiteral( "" ); #endif } QString hostOSName() { #ifdef WITH_KOSRelease KOSRelease r; if ( !r.name().isEmpty() ) { return r.name(); } #endif return hostOS(); } static QString hostCPUmatch( const QString& s ) { const QString line = s.toLower(); if ( line.contains( "intel" ) ) { return QStringLiteral( "Intel" ); } else if ( line.contains( "amd" ) ) { return QStringLiteral( "AMD" ); } return QString(); } #if defined( Q_OS_FREEBSD ) QString hostCPU_FreeBSD() { constexpr const size_t sysctl_buffer_size = 128; char sysctl_buffer[ sysctl_buffer_size ]; size_t s = sysctl_buffer_size; memset( sysctl_buffer, 0, sizeof( sysctl_buffer ) ); int r = sysctlbyname( "hw.model", &sysctl_buffer, &s, NULL, 0 ); if ( r ) { return QString(); } sysctl_buffer[ sysctl_buffer_size - 1 ] = 0; QString model( sysctl_buffer ); return hostCPUmatch( model ); } #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() { QFile cpuinfo( "/proc/cpuinfo" ); if ( cpuinfo.open( QIODevice::ReadOnly ) ) { QTextStream in( &cpuinfo ); QString line; while ( in.readLineInto( &line ) ) { if ( line.startsWith( "vendor_id" ) ) { return hostCPUmatch( line ); } if ( line.startsWith( "CPU implementer" ) ) { return hostCPUmatchARM( line ); } } } return QString(); // Not open, or not found } #endif QString hostCPU() { #if defined( Q_OS_FREEBSD ) return hostCPU_FreeBSD(); #elif defined( Q_OS_LINUX ) return hostCPU_Linux(); #else return QString(); #endif } Calamares::JobResult HostInfoJob::exec() { cDebug() << "Collecting host information..."; auto* gs = Calamares::JobQueue::instance()->globalStorage(); gs->insert( "hostOS", hostOS() ); gs->insert( "hostOSName", hostOSName() ); gs->insert( "hostCPU", hostCPU() ); // Memory can't be negative, so it's reported as unsigned long. auto ram = CalamaresUtils::BytesToMiB( qint64( CalamaresUtils::System::instance()->getTotalMemoryB().first ) ); if ( ram ) { gs->insert( "hostRAMMiB", ram ); } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( HostInfoJobFactory, registerPlugin< HostInfoJob >(); ) calamares-3.2.41.1/src/modules/hostinfo/HostInfoJob.h000066400000000000000000000023311410275732300223200ustar00rootroot00000000000000/* === 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 HOSTINFOJOB_H #define HOSTINFOJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include /** @brief the compile-time host OS * * Returns "FreeBSD" or "Linux" or empty. */ QString hostOS(); /** @brief the run-time host OS * * Returns os-release NAME information, or if that is blank or not available, * the same as hostOS(). */ QString hostOSName(); /** @brief the run-time CPU architecture * * Returns "Intel" or "AMD" or blank, if Calamares can determine what * CPU is currently in use (based on /proc/cpuinfo or hw.model). */ QString hostCPU(); class PLUGINDLLEXPORT HostInfoJob : public Calamares::CppJob { Q_OBJECT public: explicit HostInfoJob( QObject* parent = nullptr ); ~HostInfoJob() override; QString prettyName() const override; Calamares::JobResult exec() override; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( HostInfoJobFactory ) #endif // HOSTINFOJOB_H calamares-3.2.41.1/src/modules/hostinfo/Tests.cpp000066400000000000000000000041711410275732300215750ustar00rootroot00000000000000/* === 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 "HostInfoJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include class HostInfoTests : public QObject { Q_OBJECT public: HostInfoTests() {} ~HostInfoTests() override {} private Q_SLOTS: void initTestCase(); void testHostOS(); }; void HostInfoTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "HostInfo test started."; } void HostInfoTests::testHostOS() { #if defined( Q_OS_FREEBSD ) QString expect( "FreeBSD" ); #elif defined( Q_OS_LINUX ) QString expect( "Linux" ); #else QString expect( "Plan8" ); // Expect failure #endif QCOMPARE( expect, hostOS() ); QCOMPARE( expect, hostOSName() ); // Might be the same // 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 ) ); } } } QTEST_GUILESS_MAIN( HostInfoTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/modules/hwclock/000077500000000000000000000000001410275732300175655ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/hwclock/main.py000066400000000000000000000037111410275732300210650ustar00rootroot00000000000000#!/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: 2017-2018 Gabriel Craciunescu # 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 import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Setting hardware clock.") def run(): """ Set hardware clock. """ hwclock_rtc = ["hwclock", "--systohc", "--utc"] hwclock_isa = ["hwclock", "--systohc", "--utc", "--directisa"] is_broken_rtc = False is_broken_isa = False ret = libcalamares.utils.target_env_call(hwclock_rtc) if ret != 0: is_broken_rtc = True libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) libcalamares.utils.debug(" .. RTC method failed, trying ISA bus method.") else: libcalamares.utils.debug("Hwclock set using RTC method.") if is_broken_rtc: ret = libcalamares.utils.target_env_call(hwclock_isa) if ret != 0: is_broken_isa = True libcalamares.utils.debug("Hwclock returned error code {}".format(ret)) libcalamares.utils.debug(" .. ISA bus method failed.") else: libcalamares.utils.debug("Hwclock set using ISA bus method.") if is_broken_rtc and is_broken_isa: libcalamares.utils.debug("BIOS or Kernel BUG: Setting hwclock failed.") return None calamares-3.2.41.1/src/modules/hwclock/module.desc000066400000000000000000000002501410275732300217070ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "hwclock" interface: "python" script: "main.py" noconfig: true calamares-3.2.41.1/src/modules/initcpio/000077500000000000000000000000001410275732300177515ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/initcpio/CMakeLists.txt000066400000000000000000000007211410275732300225110ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares_add_test( initcpiotest SOURCES Tests.cpp LIBRARIES calamares_job_initcpio # From above yamlcpp::yamlcpp ) calamares-3.2.41.1/src/modules/initcpio/InitcpioJob.cpp000066400000000000000000000056161410275732300226760ustar00rootroot00000000000000/* === 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 "InitcpioJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" #include #include InitcpioJob::InitcpioJob( QObject* parent ) : Calamares::CppJob( parent ) { } InitcpioJob::~InitcpioJob() {} QString InitcpioJob::prettyName() const { return tr( "Creating initramfs with mkinitcpio." ); } void fixPermissions( const QDir& d ) { for ( const auto& fi : d.entryInfoList( { "initramfs*" }, QDir::Files ) ) { QFile f( fi.absoluteFilePath() ); if ( f.exists() ) { cDebug() << "initcpio fixing permissions for" << f.fileName(); f.setPermissions( QFileDevice::ReadOwner | QFileDevice::WriteOwner ); } } } Calamares::JobResult InitcpioJob::exec() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); if ( m_unsafe ) { cDebug() << "Skipping mitigations for unsafe initramfs permissions."; } else { QDir d( CalamaresUtils::System::instance()->targetPath( "/boot" ) ); if ( d.exists() ) { fixPermissions( d ); } } cDebug() << "Updating initramfs with kernel" << m_kernel; auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "mkinitcpio", "-p", m_kernel }, QString(), QString() /* no timeout , 0 */ ); return r.explainProcess( "mkinitcpio", std::chrono::seconds( 10 ) /* fake timeout */ ); } 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 ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( InitcpioJobFactory, registerPlugin< InitcpioJob >(); ) calamares-3.2.41.1/src/modules/initcpio/InitcpioJob.h000066400000000000000000000016131410275732300223340ustar00rootroot00000000000000/* === 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 INITCPIOJOB_H #define INITCPIOJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT InitcpioJob : public Calamares::CppJob { Q_OBJECT public: explicit InitcpioJob( QObject* parent = nullptr ); ~InitcpioJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_kernel; bool m_unsafe = false; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InitcpioJobFactory ) #endif // INITCPIOJOB_H calamares-3.2.41.1/src/modules/initcpio/Tests.cpp000066400000000000000000000016751410275732300215700ustar00rootroot00000000000000/* === 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 "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include extern void fixPermissions( const QDir& d ); QTEST_GUILESS_MAIN( InitcpioTests ) InitcpioTests::InitcpioTests() {} InitcpioTests::~InitcpioTests() {} void InitcpioTests::initTestCase() { } void InitcpioTests::testFixPermissions() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Fixing up /boot"; fixPermissions( QDir( "/boot" ) ); cDebug() << "Fixing up /nonexistent"; fixPermissions( QDir( "/nonexistent/nonexistent" ) ); QVERIFY( true ); } calamares-3.2.41.1/src/modules/initcpio/Tests.h000066400000000000000000000010001410275732300212130ustar00rootroot00000000000000/* === 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 TESTS_H #define TESTS_H #include class InitcpioTests : public QObject { Q_OBJECT public: InitcpioTests(); ~InitcpioTests() override; private Q_SLOTS: void initTestCase(); void testFixPermissions(); }; #endif calamares-3.2.41.1/src/modules/initcpio/initcpio.conf000066400000000000000000000016731410275732300224450ustar00rootroot00000000000000# 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. # # 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. # # Note that "all" is probably not a good preset to use either. kernel: linux312 # 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). be_unsafe: false calamares-3.2.41.1/src/modules/initcpio/initcpio.schema.yaml000066400000000000000000000005341410275732300237140ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/initcpiocfg/000077500000000000000000000000001410275732300204315ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/initcpiocfg/main.py000066400000000000000000000145061410275732300217350ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares from libcalamares.utils import debug, target_env_call import os from collections import OrderedDict import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring mkinitcpio.") 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: 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 def write_mkinitcpio_lines(hooks, modules, files, root_mount_point): """ Set up mkinitcpio.conf. :param hooks: :param modules: :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 = [] 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) 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(): """ 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 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"] modules = [] files = [] encrypt_hook = False openswap_hook = False unencrypted_separate_boot = False # It is important that the plymouth hook comes before any encrypt hook if detect_plymouth(): hooks.append("plymouth") for partition in partitions: if partition["fs"] == "linuxswap" and not partition.get("claimed", None): # Skip foreign swap continue if partition["fs"] == "linuxswap": swap_uuid = partition["uuid"] if "luksMapperName" in partition: openswap_hook = True if partition["fs"] == "btrfs": btrfs = "yes" if "lvm2" in partition["fs"]: lvm2 = "yes" if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition): unencrypted_separate_boot = True if partition["mountPoint"] == "/usr": hooks.append("usr") if encrypt_hook: 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: hooks.append("lvm2") if swap_uuid != "": if encrypt_hook and openswap_hook: hooks.extend(["openswap"]) hooks.extend(["resume", "filesystems"]) 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") else: hooks.append("fsck") write_mkinitcpio_lines(hooks, modules, files, root_mount_point) def run(): """ Calls routine with given parameters to modify '/etc/mkinitcpio.conf'. :return: """ partitions = libcalamares.globalstorage.value("partitions") root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("initcpiocfg")) 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("initcpiocfg")) modify_mkinitcpio_conf(partitions, root_mount_point) return None calamares-3.2.41.1/src/modules/initcpiocfg/module.desc000066400000000000000000000002331410275732300225540ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initcpiocfg" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/initramfs/000077500000000000000000000000001410275732300201275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/initramfs/CMakeLists.txt000066400000000000000000000007251410275732300226730ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares_add_test( initramfstest SOURCES Tests.cpp LIBRARIES calamares_job_initramfs # From above yamlcpp::yamlcpp ) calamares-3.2.41.1/src/modules/initramfs/InitramfsJob.cpp000066400000000000000000000056071410275732300232320ustar00rootroot00000000000000/* === 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 "InitramfsJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" InitramfsJob::InitramfsJob( QObject* parent ) : Calamares::CppJob( parent ) { } InitramfsJob::~InitramfsJob() {} QString InitramfsJob::prettyName() const { return tr( "Creating initramfs." ); } Calamares::JobResult InitramfsJob::exec() { CalamaresUtils::UMask m( CalamaresUtils::UMask::Safe ); cDebug() << "Updating initramfs with kernel" << m_kernel; if ( m_unsafe ) { cDebug() << "Skipping mitigations for unsafe initramfs permissions."; } else { // First make sure we generate a safe initramfs with suitable permissions. static const char confFile[] = "/etc/initramfs-tools/conf.d/calamares-safe-initramfs.conf"; static const char contents[] = "UMASK=0077\n"; if ( CalamaresUtils::System::instance()->createTargetFile( confFile, QByteArray( contents ) ).failed() ) { cWarning() << Logger::SubEntry << "Could not configure safe UMASK for initramfs."; // But continue anyway. } } // And then do the ACTUAL work. auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "update-initramfs", "-k", m_kernel, "-c", "-t" }, QString(), QString() /* no timeout, 0 */ ); return r.explainProcess( "update-initramfs", std::chrono::seconds( 10 ) /* fake timeout */ ); } void InitramfsJob::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() << "*initramfs* using running kernel" << m_kernel; } else { cWarning() << "*initramfs* could not determine running kernel, using 'all'." << Logger::Continuation << r.getExitCode() << r.getOutput(); } } m_unsafe = CalamaresUtils::getBool( configurationMap, "be_unsafe", false ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( InitramfsJobFactory, registerPlugin< InitramfsJob >(); ) calamares-3.2.41.1/src/modules/initramfs/InitramfsJob.h000066400000000000000000000016221410275732300226700ustar00rootroot00000000000000/* === 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 INITRAMFSJOB_H #define INITRAMFSJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT InitramfsJob : public Calamares::CppJob { Q_OBJECT public: explicit InitramfsJob( QObject* parent = nullptr ); ~InitramfsJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_kernel; bool m_unsafe = false; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InitramfsJobFactory ) #endif // INITRAMFSJOB_H calamares-3.2.41.1/src/modules/initramfs/Tests.cpp000066400000000000000000000035741410275732300217460ustar00rootroot00000000000000/* === 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 "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( InitramfsTests ) InitramfsTests::InitramfsTests() {} InitramfsTests::~InitramfsTests() {} void InitramfsTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); (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() { QFile::remove( confFile ); } void InitramfsTests::testCreateTargetFile() { static const char short_confFile[] = "/calamares-safe-umask"; auto* s = CalamaresUtils::System::instance(); auto r = s->createTargetFile( short_confFile, QByteArray( contents ) ); QVERIFY( r.failed() ); QVERIFY( !r ); QString path = r.path(); QVERIFY( path.isEmpty() ); // because no rootmountpoint is set Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/tmp" ); path = s->createTargetFile( short_confFile, QByteArray( contents ) ).path(); QCOMPARE( path, QString( confFile ) ); QVERIFY( path.endsWith( short_confFile ) ); // chroot, so path create relative to QVERIFY( path.startsWith( "/tmp/" ) ); QVERIFY( QFile::exists( path ) ); QFileInfo fi( path ); QVERIFY( fi.exists() ); QCOMPARE( ulong( fi.size() ), sizeof( contents ) - 1 ); // don't count trailing NUL QFile::remove( path ); } calamares-3.2.41.1/src/modules/initramfs/Tests.h000066400000000000000000000011471410275732300214050ustar00rootroot00000000000000/* === 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 TESTS_H #define TESTS_H #include class InitramfsTests : public QObject { Q_OBJECT public: InitramfsTests(); ~InitramfsTests() override; private Q_SLOTS: void initTestCase(); void cleanup(); // TODO: this doesn't actually test any of the functionality of this job void testCreateTargetFile(); }; #endif calamares-3.2.41.1/src/modules/initramfs/initramfs.conf000066400000000000000000000027651410275732300230040ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # ## initramfs module # # This module is specific to Debian based distros. Post installation on Debian # the initramfs needs to be updated so as to not interrupt the boot process # with a error about fsck.ext4 not being found. # ## Debian specific notes # # If you're using live-build to build your ISO and setup the runtime env # make sure that you purge the live-\* packages on the target system # before running this module, since live-config dpkg-diverts update-initramfs # and can cause all sorts of fun issues. --- # There is only one configuration item for this module, # the kernel to be loaded. This 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. # # Whatever is set, that string is passed as *version* argument to the # `-k` option of *update-initramfs*. 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. # # The default is empty/unset, leading to the behavior from Calamares # 3.2.9 and earlier which passed "all" as version. kernel: "all" # 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). be_unsafe: false calamares-3.2.41.1/src/modules/initramfscfg/000077500000000000000000000000001410275732300206075ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/initramfscfg/encrypt_hook000077500000000000000000000007521410275732300232450ustar00rootroot00000000000000#!/bin/sh # # SPDX-FileCopyrightText: 2016 David McKinney # SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions if [ -f /crypto_keyfile.bin ] then cp /crypto_keyfile.bin ${DESTDIR} fi if [ -f /etc/crypttab ] then cp /etc/crypttab ${DESTDIR}/etc/ fi calamares-3.2.41.1/src/modules/initramfscfg/encrypt_hook_nokey000077500000000000000000000006311410275732300244460ustar00rootroot00000000000000#!/bin/sh # # SPDX-FileCopyrightText: 2016 David McKinney # SPDX-License-Identifier: GPL-3.0-or-later PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions if [ -f /etc/crypttab ] then cp /etc/crypttab ${DESTDIR}/etc/ fi calamares-3.2.41.1/src/modules/initramfscfg/main.py000066400000000000000000000057471410275732300221220ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares import inspect import os import shutil import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring initramfs.") def copy_initramfs_hooks(partitions, root_mount_point): """ Copies initramfs hooks so they are picked up by update-initramfs :param partitions: :param root_mount_point: """ encrypt_hook = False unencrypted_separate_boot = False for partition in partitions: if partition["mountPoint"] == "/" and "luksMapperName" in partition: encrypt_hook = True if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition): unencrypted_separate_boot = True if encrypt_hook: target = "{!s}/usr/share/initramfs-tools/hooks/encrypt_hook".format( root_mount_point) # Find where this module is installed _filename = inspect.getframeinfo(inspect.currentframe()).filename _path = os.path.dirname(os.path.abspath(_filename)) if unencrypted_separate_boot: shutil.copy2( os.path.join(_path, "encrypt_hook_nokey"), target ) else: shutil.copy2( os.path.join(_path, "encrypt_hook"), target ) os.chmod(target, 0o755) def run(): """ Calls routine with given parameters to configure initramfs :return: """ partitions = libcalamares.globalstorage.value("partitions") root_mount_point = libcalamares.globalstorage.value("rootMountPoint") if not partitions: libcalamares.utils.warning("partitions is empty, {!s}".format(partitions)) return (_("Configuration Error"), _("No partitions are defined for
{!s}
to use." ).format("initramfscfg")) 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("initramfscfg")) copy_initramfs_hooks(partitions, root_mount_point) return None calamares-3.2.41.1/src/modules/initramfscfg/module.desc000066400000000000000000000002551410275732300227360ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "initramfscfg" interface: "python" script: "main.py" noconfig: true calamares-3.2.41.1/src/modules/interactiveterminal/000077500000000000000000000000001410275732300222045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/interactiveterminal/CMakeLists.txt000066400000000000000000000017051410275732300247470ustar00rootroot00000000000000# === 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 ) find_package( KF5Service ${kf5_ver} ) find_package( KF5Parts ${kf5_ver} ) set_package_properties( KF5Service PROPERTIES PURPOSE "For finding KDE services at runtime" ) set_package_properties( KF5Parts PROPERTIES PURPOSE "For finding KDE parts at runtime" ) if ( KF5Parts_FOUND AND KF5Service_FOUND ) calamares_add_plugin( interactiveterminal TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES InteractiveTerminalViewStep.cpp InteractiveTerminalPage.cpp LINK_LIBRARIES KF5::Service KF5::Parts SHARED_LIB ) else() calamares_skip_module( "interactiveterminal (missing requirements)" ) endif() calamares-3.2.41.1/src/modules/interactiveterminal/InteractiveTerminalPage.cpp000066400000000000000000000056031410275732300274620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "InteractiveTerminalPage.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "viewpages/ViewStep.h" #include #include #include #include #include #include #include #include InteractiveTerminalPage::InteractiveTerminalPage( QWidget* parent ) : QWidget( parent ) , m_layout( new QVBoxLayout( this ) ) , m_termHostWidget( nullptr ) { setLayout( m_layout ); m_layout->setContentsMargins( 0, 0, 0, 0 ); m_headerLabel = new QLabel( this ); m_layout->addWidget( m_headerLabel ); } void InteractiveTerminalPage::errorKonsoleNotInstalled() { QMessageBox::critical( this, tr( "Konsole not installed" ), tr( "Please install KDE Konsole and try again!" ), QMessageBox::Ok ); } 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. KService::Ptr service = KService::serviceByDesktopName( "konsolepart" ); if ( !service ) { // And all of this hoping the Konsole application is installed. If not, // tough cookies. errorKonsoleNotInstalled(); return; } // Create one instance of konsolepart. KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} ); if ( !p ) { // One more opportunity for the loading operation to fail. errorKonsoleNotInstalled(); return; } // Cast the konsolepart to the TerminalInterface... TerminalInterface* t = qobject_cast< TerminalInterface* >( p ); if ( !t ) { // This is why we can't have nice things. errorKonsoleNotInstalled(); return; } // Make the widget persist even if the KPart goes out of scope... p->setAutoDeleteWidget( false ); // ... but kill the KPart if the widget goes out of scope. p->setAutoDeletePart( true ); 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 ) ); } void InteractiveTerminalPage::setCommand( const QString& command ) { m_command = command; CALAMARES_RETRANSLATE( m_headerLabel->setText( tr( "Executing script:  %1" ).arg( m_command ) ); ); } calamares-3.2.41.1/src/modules/interactiveterminal/InteractiveTerminalPage.h000066400000000000000000000014261410275732300271260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef INTERACTIVETERMINALPAGE_H #define INTERACTIVETERMINALPAGE_H #include class QLabel; class QVBoxLayout; class InteractiveTerminalPage : public QWidget { Q_OBJECT public: explicit InteractiveTerminalPage( QWidget* parent = nullptr ); void onActivate(); void setCommand( const QString& command ); private: QVBoxLayout* m_layout; QWidget* m_termHostWidget; QString m_command; QLabel* m_headerLabel; void errorKonsoleNotInstalled(); }; #endif // INTERACTIVETERMINALPAGE_H calamares-3.2.41.1/src/modules/interactiveterminal/InteractiveTerminalViewStep.cpp000066400000000000000000000040231410275732300303470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "InteractiveTerminalViewStep.h" #include "InteractiveTerminalPage.h" #include "utils/Logger.h" #include CALAMARES_PLUGIN_FACTORY_DEFINITION( InteractiveTerminalViewStepFactory, registerPlugin< InteractiveTerminalViewStep >(); ) InteractiveTerminalViewStep::InteractiveTerminalViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new InteractiveTerminalPage() ) { emit nextStatusChanged( true ); } InteractiveTerminalViewStep::~InteractiveTerminalViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString InteractiveTerminalViewStep::prettyName() const { return tr( "Script" ); } QWidget* InteractiveTerminalViewStep::widget() { return m_widget; } bool InteractiveTerminalViewStep::isNextEnabled() const { return true; } bool InteractiveTerminalViewStep::isBackEnabled() const { return true; } bool InteractiveTerminalViewStep::isAtBeginning() const { return true; } bool InteractiveTerminalViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > InteractiveTerminalViewStep::jobs() const { cDebug() << "InteractiveTerminal" << prettyName() << "asked for jobs(), this is probably wrong."; return QList< Calamares::job_ptr >(); } void InteractiveTerminalViewStep::onActivate() { cDebug() << "InteractiveTerminal" << prettyName() << "activated."; m_widget->onActivate(); } void InteractiveTerminalViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { if ( configurationMap.contains( "command" ) && configurationMap.value( "command" ).type() == QVariant::String ) { m_widget->setCommand( configurationMap.value( "command" ).toString() ); } } calamares-3.2.41.1/src/modules/interactiveterminal/InteractiveTerminalViewStep.h000066400000000000000000000025131410275732300300160ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef INTERACTIVETERMINALPAGEPLUGIN_H #define INTERACTIVETERMINALPAGEPLUGIN_H #include #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" class InteractiveTerminalPage; class PLUGINDLLEXPORT InteractiveTerminalViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit InteractiveTerminalViewStep( QObject* parent = nullptr ); ~InteractiveTerminalViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; protected: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: InteractiveTerminalPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( InteractiveTerminalViewStepFactory ) #endif // INTERACTIVETERMINALPAGEPLUGIN_H calamares-3.2.41.1/src/modules/interactiveterminal/interactiveterminal.conf000066400000000000000000000012341410275732300271240ustar00rootroot00000000000000# 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 # target system to examine the state there. # # The one configuration key *command*, if defined, is passed # as a command to run in the terminal window before any user # input is accepted. The user must exit the terminal manually # or click *next* to proceed to the next installation step. # # If no command is defined, no command is run and the user # gets a plain terminal session. --- command: "echo Hello" calamares-3.2.41.1/src/modules/keyboard/000077500000000000000000000000001410275732300177335ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/keyboard/AdditionalLayoutInfo.h000066400000000000000000000010201410275732300241570ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/keyboard/CMakeLists.txt000066400000000000000000000013221410275732300224710ustar00rootroot00000000000000# === 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 SetKeyboardLayoutJob.cpp keyboardwidget/keyboardglobal.cpp keyboardwidget/keyboardpreview.cpp UI KeyboardPage.ui RESOURCES keyboard.qrc SHARED_LIB ) calamares_add_test( keyboardtest SOURCES Tests.cpp SetKeyboardLayoutJob.cpp RESOURCES keyboard.qrc ) calamares-3.2.41.1/src/modules/keyboard/Config.cpp000066400000000000000000000454051410275732300216540ustar00rootroot00000000000000/* === 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. * */ #include "Config.h" #include "SetKeyboardLayoutJob.h" #include "keyboardwidget/keyboardpreview.h" #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 /* Returns stringlist with suitable setxkbmap command-line arguments * to set the given @p model. */ static inline QStringList xkbmap_model_args( const QString& model ) { QStringList r { "-model", model }; return r; } /* Returns stringlist with suitable setxkbmap command-line arguments * to set the given @p layout and @p variant. */ static inline QStringList xkbmap_layout_args( const QString& layout, const QString& variant ) { QStringList r { "-layout", layout }; if ( !variant.isEmpty() ) { r << "-variant" << 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 ) ) , m_keyboardLayoutsModel( new KeyboardLayoutModel( this ) ) , m_keyboardVariantsModel( new KeyboardVariantsModel( this ) ) { m_setxkbmapTimer.setSingleShot( true ); // Connect signals and slots 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_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, this, &Config::xkbChanged ); // 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_additionalLayoutInfo.groupSwitcher = "grp:alt_shift_toggle"; } QProcess::execute( "setxkbmap", xkbmap_layout_args( { m_additionalLayoutInfo.additionalLayout, m_selectedLayout }, { m_additionalLayoutInfo.additionalVariant, m_selectedVariant }, m_additionalLayoutInfo.groupSwitcher ) ); cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added " << m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant << " since current layout is not ASCII-capable)"; } else { QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) ); cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant; } m_setxkbmapTimer.disconnect( this ); } KeyboardModelsModel* Config::keyboardModels() const { return m_keyboardModelsModel; } KeyboardLayoutModel* Config::keyboardLayouts() const { return m_keyboardLayoutsModel; } KeyboardVariantsModel* Config::keyboardVariants() const { return m_keyboardVariantsModel; } 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; } void Config::detectCurrentKeyboardLayout() { if ( m_state != State::Initial ) { return; } cPointerSetter returnToIntial( &m_state, State::Initial ); m_state = State::Guessing; //### Detect current keyboard layout and variant QString currentLayout; QString currentVariant; QProcess process; process.start( "setxkbmap", QStringList() << "-print" ); if ( process.waitForFinished() ) { const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); // 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 ) { if ( !line.trimmed().startsWith( "xkb_symbols" ) ) { continue; } int firstQuote = line.indexOf( '"' ); int lastQuote = line.lastIndexOf( '"' ); 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 ); if ( currentLayout.contains( "(" ) ) { int parenthesisIndex = currentLayout.indexOf( "(" ); currentVariant = currentLayout.mid( parenthesisIndex + 1 ).trimmed(); currentVariant.chop( 1 ); currentLayout = currentLayout.mid( 0, parenthesisIndex ).trimmed(); } break; } } } //### Layouts and Variants QPersistentModelIndex currentLayoutItem = findLayout( m_keyboardLayoutsModel, currentLayout ); if ( !currentLayoutItem.isValid() && ( ( currentLayout == "latin" ) || ( currentLayout == "pc" ) ) ) { currentLayout = "us"; currentLayoutItem = findLayout( m_keyboardLayoutsModel, currentLayout ); } // Set current layout and variant if ( currentLayoutItem.isValid() ) { m_keyboardLayoutsModel->setCurrentIndex( currentLayoutItem.row() ); updateVariants( currentLayoutItem, currentVariant ); } // 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() && m_keyboardLayoutsModel->rowCount() > 0 ) { m_keyboardLayoutsModel->setCurrentIndex( m_keyboardLayoutsModel->index( 0 ).row() ); } } QString Config::prettyStatus() const { QString status; status += tr( "Set keyboard model to %1.
" ) .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->label( m_keyboardVariantsModel->currentIndex() ) : QString( "" ); status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); return status; } Calamares::JobList Config::createJobs() { QList< Calamares::job_ptr > list; Calamares::Job* j = new SetKeyboardLayoutJob( m_selectedModel, m_selectedLayout, m_selectedVariant, m_additionalLayoutInfo, m_xOrgConfFileName, m_convertedKeymapPath, m_writeEtcDefaultKeyboard ); list.append( Calamares::job_ptr( j ) ); return list; } 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 < layouts->rowCount(); ++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; layouts->setCurrentIndex( i ); foundCountryPart = true; break; } } if ( foundCountryPart ) { ++countryPart; if ( countryPart != langParts.rend() ) { cDebug() << "Next level:" << *countryPart; for ( int variantnumber = 0; variantnumber < variants->rowCount(); ++variantnumber ) { if ( variants->key( variantnumber ).compare( *countryPart, Qt::CaseInsensitive ) == 0 ) { variants->setCurrentIndex( variantnumber ); cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' ' << variants->key( variantnumber ); } } } } } } void Config::guessLocaleKeyboardLayout() { if ( m_state != State::Initial ) { return; } cPointerSetter 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 _ * 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", "us" }, /* Canadian English */ { "el_CY", "gr" }, /* Greek in Cyprus */ { "el_GR", "gr" }, /* Greek in Greeze */ { "ig_NG", "igbo_NG" }, /* Igbo in Nigeria */ { "ha_NG", "hausa_NG" } /* Hausa */ } ); // Try to preselect a layout, depending on language and locale Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString lang = gs->value( "localeConf" ).toMap().value( "LANG" ).toString(); cDebug() << "Got locale language" << lang; if ( !lang.isEmpty() ) { // Chop off .codeset and @modifier int index = lang.indexOf( '.' ); if ( index >= 0 ) { lang.truncate( index ); } index = lang.indexOf( '@' ); if ( index >= 0 ) { lang.truncate( index ); } lang.replace( '-', '_' ); // Normalize separators } if ( !lang.isEmpty() ) { std::string lang_s = lang.toStdString(); if ( specialCaseMap.contains( lang_s ) ) { QString newLang = QString::fromStdString( specialCaseMap.value( lang_s ) ); cDebug() << Logger::SubEntry << "special case language" << lang << "becomes" << newLang; lang = newLang; } } if ( !lang.isEmpty() ) { const auto langParts = lang.split( '_', SplitSkipEmptyParts ); // Note that this his string is not fit for display purposes! // It doesn't come from QLocale::nativeCountryName. QString country = QLocale::countryToString( QLocale( lang ).country() ); cDebug() << Logger::SubEntry << "extracted country" << country << "::" << langParts; guessLayout( langParts, m_keyboardLayoutsModel, m_keyboardVariantsModel ); } } void Config::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 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? } void Config::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant ) { const auto variants = m_keyboardLayoutsModel->item( currentItem.row() ).second.variants; m_keyboardVariantsModel->setVariants( variants ); auto index = -1; for ( const auto& key : variants.keys() ) { index++; if ( variants[ key ] == currentVariant ) { m_keyboardVariantsModel->setCurrentIndex( index ); return; } } } 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; } } calamares-3.2.41.1/src/modules/keyboard/Config.h000066400000000000000000000104111410275732300213060ustar00rootroot00000000000000/* === 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 KEYBOARD_CONFIG_H #define KEYBOARD_CONFIG_H #include "AdditionalLayoutInfo.h" #include "Job.h" #include "KeyboardLayoutModel.h" #include #include #include #include #include class Config : public QObject { Q_OBJECT Q_PROPERTY( KeyboardModelsModel* keyboardModelsModel READ keyboardModels CONSTANT FINAL ) Q_PROPERTY( KeyboardLayoutModel* keyboardLayoutsModel READ keyboardLayouts CONSTANT FINAL ) Q_PROPERTY( KeyboardVariantsModel* keyboardVariantsModel READ keyboardVariants CONSTANT FINAL ) Q_PROPERTY( QString prettyStatus READ prettyStatus NOTIFY prettyStatusChanged FINAL ) public: Config( QObject* parent = nullptr ); /// @brief Based on current xkb settings, pick a layout void detectCurrentKeyboardLayout(); /// @brief Based on current locale, pick a layout void guessLocaleKeyboardLayout(); Calamares::JobList createJobs(); QString prettyStatus() const; /// @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 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; 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; // 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; /** @brief Handles state change when selections in model, variant, layout * * This handles the Initial -> UserSelected transition in particular. */ void selectionChange(); }; #endif calamares-3.2.41.1/src/modules/keyboard/KeyboardData_p.cxxtr000066400000000000000000001064121410275732300237020ustar00rootroot00000000000000/* 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() }; } } calamares-3.2.41.1/src/modules/keyboard/KeyboardLayoutModel.cpp000066400000000000000000000143611410275732300243630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #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( QLocale(), 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 ) { init(); } int KeyboardLayoutModel::rowCount( const QModelIndex& parent ) const { Q_UNUSED( parent ) return m_layouts.count(); } QVariant KeyboardLayoutModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } switch ( role ) { case Qt::DisplayRole: { 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: return m_layouts.at( index.row() ).first; } return QVariant(); } const QPair< QString, KeyboardGlobal::KeyboardInfo > KeyboardLayoutModel::item( const int& index ) const { if ( index >= m_layouts.count() || index < 0 ) { return QPair< QString, KeyboardGlobal::KeyboardInfo >(); } 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() { KeyboardGlobal::LayoutsMap layouts = KeyboardGlobal::getKeyboardLayouts(); for ( KeyboardGlobal::LayoutsMap::const_iterator it = layouts.constBegin(); it != layouts.constEnd(); ++it ) { m_layouts.append( qMakePair( it.key(), it.value() ) ); } 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; } ); } QHash< int, QByteArray > KeyboardLayoutModel::roleNames() const { return { { Qt::DisplayRole, "label" }, { KeyboardLayoutKeyRole, "key" }, { KeyboardVariantsRole, "variants" } }; } void KeyboardLayoutModel::setCurrentIndex( int index ) { if ( index >= m_layouts.count() || index < 0 ) { return; } if ( m_currentIndex != index ) { m_currentIndex = index; emit currentIndexChanged( m_currentIndex ); } } int 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(); } calamares-3.2.41.1/src/modules/keyboard/KeyboardLayoutModel.h000066400000000000000000000106661410275732300240340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef KEYBOARDLAYOUTMODEL_H #define KEYBOARDLAYOUTMODEL_H #include "keyboardwidget/keyboardglobal.h" #include #include #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 Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged ) public: enum Roles : int { KeyboardVariantsRole = Qt::UserRole, KeyboardLayoutKeyRole }; KeyboardLayoutModel( QObject* parent = nullptr ); int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role ) const override; 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; private: void init(); int m_currentIndex = -1; QList< QPair< QString, KeyboardGlobal::KeyboardInfo > > m_layouts; 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 calamares-3.2.41.1/src/modules/keyboard/KeyboardPage.cpp000066400000000000000000000076611410275732300230060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "KeyboardPage.h" #include "Config.h" #include "KeyboardLayoutModel.h" #include "SetKeyboardLayoutJob.h" #include "keyboardwidget/keyboardpreview.h" #include "ui_KeyboardPage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/String.h" #include #include #include class LayoutItem : public QListWidgetItem { public: QString data; ~LayoutItem() override; }; LayoutItem::~LayoutItem() {} KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::Page_Keyboard ) , m_keyboardPreview( new KeyBoardPreview( this ) ) , m_config( config ) { ui->setupUi( this ); // Keyboard Preview ui->KBPreviewLayout->addWidget( m_keyboardPreview ); { 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" << model->rowCount() << model->currentIndex(); } connect( ui->buttonRestore, &QPushButton::clicked, [config = config] { config->keyboardModels()->setCurrentIndex(); } ); connect( ui->physicalModelSelector, QOverload< int >::of( &QComboBox::currentIndexChanged ), config->keyboardModels(), QOverload< int >::of( &XKBListModel::setCurrentIndex ) ); connect( config->keyboardModels(), &KeyboardModelsModel::currentIndexChanged, ui->physicalModelSelector, &QComboBox::setCurrentIndex ); connect( ui->layoutSelector->selectionModel(), &QItemSelectionModel::currentChanged, [this]( const QModelIndex& current ) { m_config->keyboardLayouts()->setCurrentIndex( current.row() ); } ); connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [this]( int index ) { ui->layoutSelector->setCurrentIndex( m_config->keyboardLayouts()->index( index ) ); m_keyboardPreview->setLayout( m_config->keyboardLayouts()->key( index ) ); m_keyboardPreview->setVariant( m_config->keyboardVariants()->key( m_config->keyboardVariants()->currentIndex() ) ); } ); 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::retranslate() { ui->retranslateUi( this ); m_config->retranslate(); } calamares-3.2.41.1/src/modules/keyboard/KeyboardPage.h000066400000000000000000000020561410275732300224440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef KEYBOARDPAGE_H #define KEYBOARDPAGE_H #include "Job.h" #include #include #include namespace Ui { class Page_Keyboard; } class Config; class KeyBoardPreview; class KeyboardPage : public QWidget { Q_OBJECT public: explicit KeyboardPage( Config* config, QWidget* parent = nullptr ); ~KeyboardPage() override; void retranslate(); private: Ui::Page_Keyboard* ui; KeyBoardPreview* m_keyboardPreview; Config* m_config; }; #endif // KEYBOARDPAGE_H calamares-3.2.41.1/src/modules/keyboard/KeyboardPage.ui000066400000000000000000000074471410275732300226430ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later Page_Keyboard 0 0 830 573 Form 9 0 12 12 Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 Keyboard Model: 0 0 :/images/restore.png:/images/restore.png 18 18 9 50 false Type here to test your keyboard physicalModelSelector layoutSelector variantSelector LE_TestKeyboard buttonRestore calamares-3.2.41.1/src/modules/keyboard/KeyboardViewStep.cpp000066400000000000000000000033711410275732300236720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "KeyboardViewStep.h" #include "Config.h" #include "KeyboardPage.h" #include "GlobalStorage.h" #include "JobQueue.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardViewStepFactory, registerPlugin< KeyboardViewStep >(); ) KeyboardViewStep::KeyboardViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( new KeyboardPage( m_config ) ) { m_config->detectCurrentKeyboardLayout(); emit nextStatusChanged( true ); } KeyboardViewStep::~KeyboardViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString KeyboardViewStep::prettyName() const { return tr( "Keyboard" ); } QString KeyboardViewStep::prettyStatus() const { return m_config->prettyStatus(); } QWidget* KeyboardViewStep::widget() { return m_widget; } bool KeyboardViewStep::isNextEnabled() const { return true; } bool KeyboardViewStep::isBackEnabled() const { return true; } bool KeyboardViewStep::isAtBeginning() const { return true; } bool KeyboardViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > KeyboardViewStep::jobs() const { return m_config->createJobs(); } void KeyboardViewStep::onActivate() { m_config->guessLocaleKeyboardLayout(); } void KeyboardViewStep::onLeave() { m_config->finalize(); } void KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/keyboard/KeyboardViewStep.h000066400000000000000000000024711410275732300233370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef KEYBOARDVIEWSTEP_H #define KEYBOARDVIEWSTEP_H #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include class Config; class KeyboardPage; class PLUGINDLLEXPORT KeyboardViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit KeyboardViewStep( QObject* parent = nullptr ); ~KeyboardViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() 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; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: Config* m_config; KeyboardPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardViewStepFactory ) #endif // KEYBOARDVIEWSTEP_H calamares-3.2.41.1/src/modules/keyboard/SetKeyboardLayoutJob.cpp000066400000000000000000000316541410275732300245150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "SetKeyboardLayoutJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/String.h" #include #include #include #include #include SetKeyboardLayoutJob::SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, const AdditionalLayoutInfo& additionalLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ) : Calamares::Job() , m_model( model ) , m_layout( layout ) , m_variant( variant ) , m_additionalLayoutInfo( additionalLayoutInfo ) , m_xOrgConfFileName( xOrgConfFileName ) , m_convertedKeymapPath( convertedKeymapPath ) , m_writeEtcDefaultKeyboard( writeEtcDefaultKeyboard ) { } QString SetKeyboardLayoutJob::prettyName() const { return tr( "Set keyboard model to %1, layout to %2-%3" ).arg( m_model ).arg( m_layout ).arg( m_variant ); } QString SetKeyboardLayoutJob::findConvertedKeymap( const QString& convertedKeymapPath ) const { cDebug() << "Looking for converted keymap in" << convertedKeymapPath; // No search path supplied, assume the distribution does not provide // converted keymaps if ( convertedKeymapPath.isEmpty() ) { return QString(); } QDir convertedKeymapDir( convertedKeymapPath ); QString name = m_variant.isEmpty() ? m_layout : ( m_layout + '-' + m_variant ); if ( convertedKeymapDir.exists( name + ".map" ) || convertedKeymapDir.exists( name + ".map.gz" ) ) { cDebug() << Logger::SubEntry << "Found converted keymap" << name; return name; } return QString(); } STATICTEST QString findLegacyKeymap( const QString& layout, const QString& model, const QString& variant ) { cDebug() << "Looking for legacy keymap" << layout << model << variant << "in QRC"; int bestMatching = 0; QString name; QFile file( ":/kbd-model-map" ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cDebug() << Logger::SubEntry << "Could not read QRC"; return QString(); } QTextStream stream( &file ); while ( !stream.atEnd() ) { QString line = stream.readLine().trimmed(); if ( line.isEmpty() || line.startsWith( '#' ) ) { continue; } QStringList mapping = line.split( '\t', SplitSkipEmptyParts ); if ( mapping.size() < 5 ) { continue; } int matching = 0; // 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 ( 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( layout + ',' ) ) { matching = 5; } if ( matching > 0 ) { if ( model.isEmpty() || model == mapping[ 2 ] ) { matching++; } QString mappingVariant = mapping[ 3 ]; if ( mappingVariant == "-" ) { mappingVariant = QString(); } else if ( mappingVariant.startsWith( ',' ) ) { mappingVariant.remove( 1, 0 ); } if ( variant == mappingVariant ) { matching++; } // We ignore mapping[4], the xkb options, for now. If we ever // allow setting options in the UI, we should match them here. } // The best matching entry so far, then let's save that if ( matching >= qMax( bestMatching, 1 ) ) { cDebug() << Logger::SubEntry << "Found legacy keymap" << mapping[ 0 ] << "with score" << matching; if ( matching > bestMatching ) { bestMatching = matching; name = mapping[ 0 ]; } } } 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() ) { keymap = findLegacyKeymap(); } if ( keymap.isEmpty() ) { cDebug() << "Trying to use X11 layout" << m_layout << "as the virtual console layout"; keymap = m_layout; } QStringList existingLines; // Read in the existing vconsole.conf, if it exists QFile file( vconsoleConfPath ); if ( file.exists() ) { file.open( QIODevice::ReadOnly | QIODevice::Text ); QTextStream stream( &file ); while ( !stream.atEnd() ) { existingLines << stream.readLine(); } 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 if ( !file.open( QIODevice::WriteOnly | QIODevice::Text ) ) { cError() << "Could not open" << file.fileName() << "for writing."; return false; } QTextStream stream( &file ); bool found = false; for ( const QString& existingLine : qAsConst( existingLines ) ) { if ( existingLine.trimmed().startsWith( "KEYMAP=" ) ) { stream << "KEYMAP=" << keymap << '\n'; found = true; } else { stream << existingLine << '\n'; } } // Add a KEYMAP= line if there wasn't any if ( !found ) { stream << "KEYMAP=" << keymap << '\n'; } stream.flush(); file.close(); cDebug() << Logger::SubEntry << "Written KEYMAP=" << keymap << "to vconsole.conf" << stream.status(); return ( stream.status() == QTextStream::Ok ); } bool SetKeyboardLayoutJob::writeX11Data( const QString& keyboardConfPath ) const { cDebug() << "Writing X11 configuration to" << keyboardConfPath; QFile file( keyboardConfPath ); 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" "# manually too freely.\n" "Section \"InputClass\"\n" " Identifier \"system-keyboard\"\n" " MatchIsKeyboard \"on\"\n"; if ( m_additionalLayoutInfo.additionalLayout.isEmpty() ) { if ( !m_layout.isEmpty() ) { stream << " Option \"XkbLayout\" \"" << m_layout << "\"\n"; } if ( !m_variant.isEmpty() ) { stream << " Option \"XkbVariant\" \"" << m_variant << "\"\n"; } } else { 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"; stream.flush(); file.close(); 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 ); } bool SetKeyboardLayoutJob::writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const { cDebug() << "Writing default keyboard data to" << defaultKeyboardPath; QFile file( defaultKeyboardPath ); 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" "# Consult the keyboard(5) manual page.\n\n"; stream << "XKBMODEL=\"" << m_model << "\"\n"; stream << "XKBLAYOUT=\"" << m_layout << "\"\n"; stream << "XKBVARIANT=\"" << m_variant << "\"\n"; stream << "XKBOPTIONS=\"\"\n\n"; stream << "BACKSPACE=\"guess\"\n"; stream.flush(); file.close(); 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 ); } Calamares::JobResult SetKeyboardLayoutJob::exec() { cDebug() << "Executing SetKeyboardLayoutJob"; // Read the location of the destination's / in the host file system from // the global settings 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 path to the converted key mappings QString convertedKeymapPath = m_convertedKeymapPath; if ( !convertedKeymapPath.isEmpty() ) { while ( convertedKeymapPath.startsWith( '/' ) ) { convertedKeymapPath.remove( 0, 1 ); } 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 ) ); } } { // 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(); } calamares-3.2.41.1/src/modules/keyboard/SetKeyboardLayoutJob.h000066400000000000000000000031561410275732300241560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2014 Kevin Kofler * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SETKEYBOARDLAYOUTJOB_H #define SETKEYBOARDLAYOUTJOB_H #include "AdditionalLayoutInfo.h" #include "Job.h" class SetKeyboardLayoutJob : public Calamares::Job { Q_OBJECT public: SetKeyboardLayoutJob( const QString& model, const QString& layout, const QString& variant, const AdditionalLayoutInfo& additionaLayoutInfo, const QString& xOrgConfFileName, const QString& convertedKeymapPath, bool writeEtcDefaultKeyboard ); QString prettyName() const override; Calamares::JobResult exec() override; private: QString findConvertedKeymap( const QString& convertedKeymapPath ) const; QString findLegacyKeymap() const; bool writeVConsoleData( const QString& vconsoleConfPath, const QString& convertedKeymapPath ) const; bool writeX11Data( const QString& keyboardConfPath ) const; bool writeDefaultKeyboardData( const QString& defaultKeyboardPath ) const; QString m_model; QString m_layout; QString m_variant; AdditionalLayoutInfo m_additionalLayoutInfo; QString m_xOrgConfFileName; QString m_convertedKeymapPath; const bool m_writeEtcDefaultKeyboard; }; #endif /* SETKEYBOARDLAYOUTJOB_H */ calamares-3.2.41.1/src/modules/keyboard/Tests.cpp000066400000000000000000000034301410275732300215410ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/modules/keyboard/images/000077500000000000000000000000001410275732300212005ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/keyboard/images/restore.png000066400000000000000000000015541410275732300233760ustar00rootroot00000000000000PNG  IHDR@@iq3IDATx^@!d#ut#P"6^"#X`!^fvmwS}gjm}~oK)!(=\hTWbַX#T(,,\5! Y?㬯?/NDw+tk산AItXʻN D ; = !Z,VF义"Զ< 6Txpɉ +Vh~ )ۜ~ XAC 3EI&$WC!H4DNiBCbG@ritE ef![@$ 7[OnX HtHcXI9Ή]];;Č ͅmF3@4tXZj0jM8w)_.Gtt T/ԘţW@`J@O%k`o)0%@|5) [e$kI-UPl[E?pwTM8:*H#SDɟ @A闌70R[3D6@L-->d_G@ht5+r[["71 D˨Xh72s08*d-hRF^W9"B%w+Mjl " ПhM]a>1yq$8o3AH\QMC#9|+,,x XBs\QDB4̉vv'RTyBk<b= 7IENDB`calamares-3.2.41.1/src/modules/keyboard/images/restore.png.license000066400000000000000000000001421410275732300250070ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/keyboard/kbd-model-map000066400000000000000000000107441410275732300222750ustar00rootroot00000000000000# 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 # (originally under LGPLv2.1+, used under the LGPL to GPL conversion clause) # # This is the version from 534644b7be7b240eb0fbbe06e20cbecbe8206767, # committed 2015-01-22 01:07:24 . # # 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 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 de at pc105 - terminate:ctrl_alt_bksp la-latin1 latam pc105 - terminate:ctrl_alt_bksp us us pc105+inet - terminate:ctrl_alt_bksp ko kr pc105 - terminate:ctrl_alt_bksp ro-std ro pc105 std terminate:ctrl_alt_bksp de-latin1 de pc105 - terminate:ctrl_alt_bksp slovene si pc105 - terminate:ctrl_alt_bksp hu101 hu pc105 qwerty terminate:ctrl_alt_bksp jp106 jp jp106 - terminate:ctrl_alt_bksp croat hr pc105 - terminate:ctrl_alt_bksp it2 it pc105 - terminate:ctrl_alt_bksp hu hu pc105 - terminate:ctrl_alt_bksp sr-latin rs pc105 latin terminate:ctrl_alt_bksp fi fi pc105 - terminate:ctrl_alt_bksp fr_CH ch pc105 fr terminate:ctrl_alt_bksp dk-latin1 dk pc105 - terminate:ctrl_alt_bksp fr fr pc105 - terminate:ctrl_alt_bksp it it pc105 - terminate:ctrl_alt_bksp ua-utf ua,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll fr-latin1 fr pc105 - terminate:ctrl_alt_bksp sg-latin1 ch pc105 de_nodeadkeys terminate:ctrl_alt_bksp be-latin1 be pc105 - terminate:ctrl_alt_bksp dk dk pc105 - terminate:ctrl_alt_bksp fr-pc fr pc105 - terminate:ctrl_alt_bksp bg_pho-utf8 bg,us pc105 ,phonetic terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll it-ibm it pc105 - terminate:ctrl_alt_bksp cz-us-qwertz cz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll br-abnt2 br abnt2 - terminate:ctrl_alt_bksp ro ro pc105 - terminate:ctrl_alt_bksp us-acentos us pc105 intl terminate:ctrl_alt_bksp pt-latin1 pt pc105 - terminate:ctrl_alt_bksp ro-std-cedilla ro pc105 std_cedilla terminate:ctrl_alt_bksp tj_alt-UTF8 tj pc105 - terminate:ctrl_alt_bksp de-latin1-nodeadkeys de pc105 nodeadkeys terminate:ctrl_alt_bksp no no pc105 - terminate:ctrl_alt_bksp bg_bds-utf8 bg,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll dvorak us pc105 dvorak terminate:ctrl_alt_bksp dvorak us pc105 dvorak-alt-intl terminate:ctrl_alt_bksp ru ru,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll cz-lat2 cz pc105 qwerty terminate:ctrl_alt_bksp pl2 pl pc105 - terminate:ctrl_alt_bksp es es pc105 - terminate:ctrl_alt_bksp ro-cedilla ro pc105 cedilla terminate:ctrl_alt_bksp ie ie pc105 - terminate:ctrl_alt_bksp et ee pc105 - terminate:ctrl_alt_bksp sk-qwerty sk pc105 - terminate:ctrl_alt_bksp,qwerty sk-qwertz sk pc105 - terminate:ctrl_alt_bksp fr-latin9 fr pc105 latin9 terminate:ctrl_alt_bksp fr_CH-latin1 ch pc105 fr terminate:ctrl_alt_bksp cf ca pc105 - terminate:ctrl_alt_bksp sv-latin1 se pc105 - terminate:ctrl_alt_bksp sr-cy rs pc105 - terminate:ctrl_alt_bksp gr gr,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll by by,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll il il pc105 - terminate:ctrl_alt_bksp kazakh kz,us pc105 - terminate:ctrl_alt_bksp,grp:shifts_toggle,grp_led:scroll lt.baltic lt pc105 - terminate:ctrl_alt_bksp lt.l4 lt pc105 - terminate:ctrl_alt_bksp lt lt pc105 - terminate:ctrl_alt_bksp khmer kh,us pc105 - terminate:ctrl_alt_bksp calamares-3.2.41.1/src/modules/keyboard/keyboard.conf000066400000000000000000000015571410275732300224120ustar00rootroot00000000000000# 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. --- # The name of the file to write X11 keyboard settings to # The default value is the name used by upstream systemd-localed. # 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. # 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 # found on Debian-related systems. # Defaults to true if nothing is set. #writeEtcDefaultKeyboard: true calamares-3.2.41.1/src/modules/keyboard/keyboard.qrc000066400000000000000000000002531410275732300222420ustar00rootroot00000000000000 kbd-model-map images/restore.png non-ascii-layouts calamares-3.2.41.1/src/modules/keyboard/keyboard.schema.yaml000066400000000000000000000006741410275732300236650ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/keyboard/keyboardwidget/000077500000000000000000000000001410275732300227375ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp000066400000000000000000000116421410275732300264300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 * Copyright (C) 2007 Free Software Foundation, Inc. * * Source by Georg Grabler * * Calamares is Free Software: see the License-Identifier above. * */ #include "keyboardglobal.h" #include "utils/Logger.h" #ifdef Q_OS_FREEBSD static const char XKB_FILE[] = "/usr/local/share/X11/xkb/rules/base.lst"; #else static const char XKB_FILE[] = "/usr/share/X11/xkb/rules/base.lst"; #endif // The xkb rules file is made of several "sections". Each section // starts with a line "! ". The static methods here // handle individual sections. /** @brief Scans a file for a named section * * Reads from @p fh incrementally until it finds a section named @p name * 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 ) { while ( !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( name ) ) { return true; } } return false; } static KeyboardGlobal::ModelsMap parseKeyboardModels( const char* filepath ) { KeyboardGlobal::ModelsMap models; QFile fh( filepath ); fh.open( QIODevice::ReadOnly ); if ( !fh.isOpen() ) { cDebug() << "X11 Keyboard model definitions not found!"; return models; } bool modelsFound = findSection( fh, "! model" ); // read the file until the end or until we break the loop while ( modelsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); // check if we start a new section if ( line.startsWith( '!' ) ) { break; } // here we are in the model section, otherwise we would continue or break QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); // insert into the model map if ( rx.indexIn( line ) != -1 ) { QString modelDesc = rx.cap( 2 ); QString model = rx.cap( 1 ); models.insert( modelDesc, model ); } } return models; } KeyboardGlobal::LayoutsMap parseKeyboardLayouts( const char* filepath ) { KeyboardGlobal::LayoutsMap layouts; //### Get Layouts ###// QFile fh( filepath ); fh.open( QIODevice::ReadOnly ); if ( !fh.isOpen() ) { cDebug() << "X11 Keyboard layout definitions not found!"; return layouts; } bool layoutsFound = findSection( fh, "! layout" ); // read the file until the end or we break the loop while ( layoutsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) { break; } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\w.*)\n$" ); // insert into the layout map if ( rx.indexIn( line ) != -1 ) { KeyboardGlobal::KeyboardInfo info; info.description = rx.cap( 2 ); info.variants.insert( QObject::tr( "Default" ), "" ); layouts.insert( rx.cap( 1 ), info ); } } fh.reset(); //### Get Variants ###// bool variantsFound = findSection( fh, "! variant" ); // read the file until the end or until we break while ( variantsFound && !fh.atEnd() ) { QByteArray line = fh.readLine(); if ( line.startsWith( '!' ) ) { break; } QRegExp rx; rx.setPattern( "^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$" ); // insert into the variants multimap, if the pattern matches if ( rx.indexIn( line ) != -1 ) { if ( layouts.find( rx.cap( 2 ) ) != layouts.end() ) { // in this case we found an entry in the multimap, and add the values to the multimap layouts.find( rx.cap( 2 ) ).value().variants.insert( rx.cap( 3 ), rx.cap( 1 ) ); } else { // create a new map in the multimap - the value was not found. KeyboardGlobal::KeyboardInfo info; info.description = rx.cap( 2 ); info.variants.insert( QObject::tr( "Default" ), "" ); info.variants.insert( rx.cap( 3 ), rx.cap( 1 ) ); layouts.insert( rx.cap( 2 ), info ); } } } return layouts; } KeyboardGlobal::LayoutsMap KeyboardGlobal::getKeyboardLayouts() { return parseKeyboardLayouts( XKB_FILE ); } KeyboardGlobal::ModelsMap KeyboardGlobal::getKeyboardModels() { return parseKeyboardModels( XKB_FILE ); } calamares-3.2.41.1/src/modules/keyboard/keyboardwidget/keyboardglobal.h000066400000000000000000000021761410275732300260770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef KEYBOARDGLOBAL_H #define KEYBOARDGLOBAL_H #include #include #include #include #include #include #include #include #include #include class KeyboardGlobal { public: struct KeyboardInfo { QString description; QMap< QString, QString > variants; }; using LayoutsMap = QMap< QString, KeyboardInfo >; using ModelsMap = QMap< QString, QString >; static LayoutsMap getKeyboardLayouts(); static ModelsMap getKeyboardModels(); }; #endif // KEYBOARDGLOBAL_H calamares-3.2.41.1/src/modules/keyboard/keyboardwidget/keyboardpreview.cpp000066400000000000000000000244531410275732300266550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "keyboardpreview.h" #include "utils/Logger.h" #include "utils/String.h" KeyBoardPreview::KeyBoardPreview( QWidget* parent ) : QWidget( parent ) , layout( "us" ) , space( 0 ) , usable_width( 0 ) , key_w( 0 ) { 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 ); // Setup keyboard types 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< 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< 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 ]; } void KeyBoardPreview::setLayout( QString _layout ) { layout = _layout; } void KeyBoardPreview::setVariant( QString _variant ) { variant = _variant; if ( !loadCodes() ) { return; } loadInfo(); repaint(); } //### //### Private //### void KeyBoardPreview::loadInfo() { // kb_104 if ( layout == "us" || layout == "th" ) { kb = &kbList[ KB_104 ]; } // kb_106 else if ( layout == "jp" ) { kb = &kbList[ KB_106 ]; } // most keyboards are 105 key so default to that else { 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() ) { cWarning() << "ckbcomp not found , keyboard preview disabled"; return false; } if ( !process.waitForFinished() ) { cWarning() << "ckbcomp failed, keyboard preview disabled"; return false; } // Clear codes codes.clear(); const QStringList list = QString( process.readAll() ).split( "\n", SplitSkipEmptyParts ); for ( const QString& line : list ) { if ( !line.startsWith( "keycode" ) || !line.contains( '=' ) ) { continue; } 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 ) ); if ( code.ctrl == code.plain ) { code.ctrl = ""; } if ( code.alt == code.plain ) { code.alt = ""; } 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 ) ); } return ""; } QString KeyBoardPreview::regular_text( int index ) { if ( index < 0 || index >= codes.size() ) { return ""; } return codes.at( index - 1 ).plain; } QString KeyBoardPreview::shift_text( int index ) { if ( index < 0 || index >= codes.size() ) { return ""; } return codes.at( index - 1 ).shift; } QString KeyBoardPreview::ctrl_text( int index ) { if ( index < 0 || index >= codes.size() ) { return ""; } return codes.at( index - 1 ).ctrl; } QString KeyBoardPreview::alt_text( int index ) { if ( index < 0 || index >= codes.size() ) { return ""; } return codes.at( index - 1 ).alt; } void KeyBoardPreview::resizeEvent( QResizeEvent* ) { space = 6; usable_width = width() - 7; key_w = ( usable_width - 14 * space ) / 15; setMaximumHeight( key_w * 4 + space * 5 + 1 ); } void KeyBoardPreview::paintEvent( QPaintEvent* event ) { QPainter p( this ); p.setRenderHint( QPainter::Antialiasing ); p.setBrush( QColor( 0xd6, 0xd6, 0xd6 ) ); p.drawRect( rect() ); QPen pen; pen.setWidth( 1 ); pen.setColor( QColor( 0x58, 0x58, 0x58 ) ); p.setPen( pen ); p.setBrush( QColor( 0x58, 0x58, 0x58 ) ); p.setBackgroundMode( Qt::TransparentMode ); p.translate( 0.5, 0.5 ); int rx = 3; 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 }; 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 ); } p.drawRoundedRect( QRectF( 6, y, first_key_w, key_w ), rx, rx ); x = 6 + first_key_w + space; } else { first_key_w = key_w; } 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 ); if ( ii == kb->keys.at( i ).size() - 1 && last_end ) { rect.setWidth( rw ); } p.drawRoundedRect( rect, rx, rx ); 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 ) ); 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 ) ); rw = rw - space - key_w; x = x + space + key_w; ii = ii + 1; p.setPen( pen ); } remaining_x[ i ] = x; remaining_widths[ i ] = rw; 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; // 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.closeSubpath(); 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 ); } QWidget::paintEvent( event ); } calamares-3.2.41.1/src/modules/keyboard/keyboardwidget/keyboardpreview.h000066400000000000000000000033071410275732300263150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef KEYBOARDPREVIEW_H #define KEYBOARDPREVIEW_H #include #include #include #include #include #include #include #include #include #include #include class KeyBoardPreview : public QWidget { Q_OBJECT public: explicit KeyBoardPreview( QWidget* parent = nullptr ); 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< QList< int > > keys; }; struct Code { QString plain, shift, ctrl, alt; }; QString layout, variant; QFont lowerFont, upperFont; 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 ); protected: void paintEvent( QPaintEvent* event ) override; void resizeEvent( QResizeEvent* event ) override; }; #endif // KEYBOARDPREVIEW_H calamares-3.2.41.1/src/modules/keyboard/layout-extractor.py000066400000000000000000000060221410275732300236330ustar00rootroot00000000000000#! /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) calamares-3.2.41.1/src/modules/keyboard/non-ascii-layouts000066400000000000000000000010041410275732300232270ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/keyboardq/000077500000000000000000000000001410275732300201145ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/keyboardq/CMakeLists.txt000066400000000000000000000013641410275732300226600ustar00rootroot00000000000000# === 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} ) calamares_add_plugin( keyboardq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES KeyboardQmlViewStep.cpp ${_keyboard}/Config.cpp ${_keyboard}/KeyboardLayoutModel.cpp ${_keyboard}/SetKeyboardLayoutJob.cpp ${_keyboard}/keyboardwidget/keyboardglobal.cpp RESOURCES keyboardq.qrc SHARED_LIB ) calamares-3.2.41.1/src/modules/keyboardq/KeyboardQmlViewStep.cpp000066400000000000000000000034121410275732300245210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "KeyboardQmlViewStep.h" #include "Config.h" #include "GlobalStorage.h" #include "JobQueue.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( KeyboardQmlViewStepFactory, registerPlugin< KeyboardQmlViewStep >(); ) KeyboardQmlViewStep::KeyboardQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config( this ) ) { m_config->detectCurrentKeyboardLayout(); emit nextStatusChanged( true ); } QString KeyboardQmlViewStep::prettyName() const { return tr( "Keyboard" ); } QString KeyboardQmlViewStep::prettyStatus() const { return m_config->prettyStatus(); } bool KeyboardQmlViewStep::isNextEnabled() const { return true; } bool KeyboardQmlViewStep::isBackEnabled() const { return true; } bool KeyboardQmlViewStep::isAtBeginning() const { return true; } bool KeyboardQmlViewStep::isAtEnd() const { return true; } Calamares::JobList KeyboardQmlViewStep::jobs() const { return m_config->createJobs(); } void KeyboardQmlViewStep::onActivate() { m_config->guessLocaleKeyboardLayout(); } void KeyboardQmlViewStep::onLeave() { m_config->finalize(); } QObject* KeyboardQmlViewStep::getConfig() { return m_config; } void KeyboardQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); Calamares::QmlViewStep::setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/keyboardq/KeyboardQmlViewStep.h000066400000000000000000000024071410275732300241710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef KEYBOARDQMLVIEWSTEP_H #define KEYBOARDQMLVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" #include class PLUGINDLLEXPORT KeyboardQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: explicit KeyboardQmlViewStep( 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; Calamares::JobList jobs() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QObject* getConfig() override; private: Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( KeyboardQmlViewStepFactory ) #endif // KEYBOARDQMLVIEWSTEP_H calamares-3.2.41.1/src/modules/keyboardq/keyboardq.conf000066400000000000000000000014231410275732300227440ustar00rootroot00000000000000# 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. --- # The name of the file to write X11 keyboard settings to # The default value is the name used by upstream systemd-localed. # 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 # 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 # found on Debian-related systems. # Defaults to true if nothing is set. #writeEtcDefaultKeyboard: true calamares-3.2.41.1/src/modules/keyboardq/keyboardq.qml000066400000000000000000000326711410275732300226210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 . */ 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 StackView { id: stack anchors.fill: parent clip: true initialItem: Item { Label { id: header anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Keyboard Model") color: Kirigami.Theme.textColor font.bold: true font.weight: Font.Bold font.pointSize: 24 } Label { anchors.horizontalCenter: parent.horizontalCenter anchors.top: header.bottom color: Kirigami.Theme.textColor horizontalAlignment: Text.AlignHCenter width: parent.width / 1.5 wrapMode: Text.WordWrap text: qsTr("Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware.") } ListView { id: list1 ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: 250 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.keyboardModelsModel //model: ["Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific"] currentIndex: model.currentIndex delegate: ItemDelegate { hoverEnabled: true width: parent.width highlighted: ListView.isCurrentItem RowLayout { anchors.fill: parent Label { text: model.label // modelData Layout.fillHeight: true Layout.fillWidth: true width: parent.width height: 32 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 } } Kirigami.Icon { source: "checkmark" Layout.preferredWidth: 22 Layout.preferredHeight: 22 color: Kirigami.Theme.highlightedTextColor visible: highlighted } } onClicked: { list1.model.currentIndex = index stack.push(layoutsList) list1.positionViewAtIndex(index, ListView.Center) } } } } Component { id: layoutsList Item { Label { id: header anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Keyboard Layout") color: Kirigami.Theme.textColor font.bold: true font.weight: Font.Bold font.pointSize: 24 } Label { anchors.horizontalCenter: parent.horizontalCenter anchors.top: header.bottom color: Kirigami.Theme.textColor horizontalAlignment: Text.AlignHCenter width: parent.width / 1.5 wrapMode: Text.WordWrap text: config.prettyStatus //text: qsTr("Set keyboard model or use the default one based on the detected hardware.") } ListView { id: list2 ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: 250 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.keyboardLayoutsModel //model: ["Brussels", "London", "Madrid", "New York", "Melbourne", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York"] currentIndex: model.currentIndex delegate: ItemDelegate { hoverEnabled: true width: parent.width highlighted: ListView.isCurrentItem RowLayout { anchors.fill: parent Label { text: model.label // modelData Layout.fillHeight: true Layout.fillWidth: true 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 } } Kirigami.Icon { source: "checkmark" Layout.preferredWidth: 22 Layout.preferredHeight: 22 color: Kirigami.Theme.highlightedTextColor visible: highlighted } } onClicked: { list2.model.currentIndex = index stack.push(variantsList) list2.positionViewAtIndex(index, ListView.Center) } } } ColumnLayout { spacing: 2 anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -30 anchors.left: parent.left anchors.leftMargin: parent.width / 15 Button { icon.name: "go-previous" text: qsTr("Models") onClicked: stack.pop() } Button { icon.name: "go-next" text: qsTr("Variants") onClicked: stack.push(variantsList) } } } } Component { id: variantsList Item { Label { id: header anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Keyboard Variant") color: Kirigami.Theme.textColor font.bold: true font.weight: Font.Bold font.pointSize: 24 } Label { anchors.horizontalCenter: parent.horizontalCenter anchors.top: header.bottom color: Kirigami.Theme.textColor horizontalAlignment: Text.AlignHCenter width: parent.width / 1.5 wrapMode: Text.WordWrap text: config.prettyStatus //text: qsTr("Variant keyboard model or use the default one based on the detected hardware.") } ListView { id: list3 ScrollBar.vertical: ScrollBar { active: true } width: parent.width / 2 height: 250 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.keyboardVariantsModel //model: ["Brussels", "London", "Madrid", "New York", "Melbourne", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York", "Brussels", "London", "Madrid", "New York"] currentIndex: model.currentIndex delegate: ItemDelegate { hoverEnabled: true width: parent.width highlighted: ListView.isCurrentItem RowLayout { anchors.fill: parent Label { text: model.label //modelData Layout.fillHeight: true Layout.fillWidth: true 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 } } Kirigami.Icon { source: "checkmark" Layout.preferredWidth: 22 Layout.preferredHeight: 22 color: Kirigami.Theme.highlightedTextColor visible: highlighted } } onClicked: { list3.model.currentIndex = index list3.positionViewAtIndex(index, ListView.Center) } } } 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("Layouts") onClicked: stack.pop() } } } } TextField { placeholderText: qsTr("Test your keyboard") height: 48 width: parent.width / 1.5 horizontalAlignment: TextInput.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: parent.height / 10 color: "#1F1F1F" background:Rectangle { z: parent.z - 1 anchors.fill: parent color: "#BDC3C7" radius: 2 opacity: 0.3 } } } calamares-3.2.41.1/src/modules/keyboardq/keyboardq.qrc000066400000000000000000000004621410275732300226060ustar00rootroot00000000000000 ../keyboard/kbd-model-map ../keyboard/images/restore.png keyboardq.qml ../keyboard/non-ascii-layouts calamares-3.2.41.1/src/modules/license/000077500000000000000000000000001410275732300175555ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/license/CMakeLists.txt000066400000000000000000000007231410275732300223170ustar00rootroot00000000000000# === 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 TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LicensePage.cpp LicenseViewStep.cpp LicenseWidget.cpp UI LicensePage.ui SHARED_LIB ) calamares-3.2.41.1/src/modules/license/LicensePage.cpp000066400000000000000000000137271410275732300224520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "LicensePage.h" #include "LicenseWidget.h" #include "ui_LicensePage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include #include #include #include #include #include #include #include static const char mustAccept[] = "#acceptFrame { border: 1px solid red;" "background-color: #fff6f6;" "border-radius: 4px;" "padding: 2px; }"; static const char okAccept[] = "#acceptFrame { padding: 3px }"; const NamedEnumTable< LicenseEntry::Type >& LicenseEntry::typeNames() { static const NamedEnumTable< LicenseEntry::Type > names { { QStringLiteral( "software" ), LicenseEntry::Type::Software }, { QStringLiteral( "driver" ), LicenseEntry::Type::Driver }, { QStringLiteral( "gpudriver" ), LicenseEntry::Type::GpuDriver }, { QStringLiteral( "browserplugin" ), LicenseEntry::Type::BrowserPlugin }, { QStringLiteral( "codec" ), LicenseEntry::Type::Codec }, { QStringLiteral( "package" ), LicenseEntry::Type::Package } }; return names; } LicenseEntry::LicenseEntry( const QVariantMap& conf ) { if ( !conf.contains( "id" ) || !conf.contains( "name" ) || !conf.contains( "url" ) ) { return; } m_id = conf[ "id" ].toString(); m_prettyName = conf[ "name" ].toString(); m_prettyVendor = conf.value( "vendor" ).toString(); m_url = QUrl( conf[ "url" ].toString() ); m_required = CalamaresUtils::getBool( conf, "required", false ); m_expand = CalamaresUtils::getBool( conf, "expand", false ); bool ok = false; QString typeString = conf.value( "type", "software" ).toString(); m_type = typeNames().find( typeString, ok ); if ( !ok ) { cWarning() << "License entry" << m_id << "has unknown type" << typeString << "(using 'software')"; } } bool LicenseEntry::isLocal() const { return m_url.isLocalFile(); } LicensePage::LicensePage( QWidget* parent ) : QWidget( parent ) , m_isNextEnabled( false ) , m_allLicensesOptional( false ) , ui( new Ui::LicensePage ) { ui->setupUi( this ); // ui->verticalLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() ); CalamaresUtils::unmarginLayout( ui->verticalLayout ); ui->acceptFrame->setStyleSheet( mustAccept ); ui->acceptFrame->layout()->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); updateGlobalStorage( false ); // Have not agreed yet connect( ui->acceptCheckBox, &QCheckBox::toggled, this, &LicensePage::checkAcceptance ); CALAMARES_RETRANSLATE_SLOT( &LicensePage::retranslate ); } void LicensePage::setEntries( const QList< LicenseEntry >& entriesList ) { CalamaresUtils::clearLayout( ui->licenseEntriesLayout ); m_allLicensesOptional = true; m_entries.clear(); m_entries.reserve( entriesList.count() ); for ( const LicenseEntry& entry : entriesList ) { LicenseWidget* w = new LicenseWidget( entry ); ui->licenseEntriesLayout->addWidget( w ); m_entries.append( w ); m_allLicensesOptional &= !entry.isRequired(); } ui->licenseEntriesLayout->addSpacerItem( new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding ) ); ui->acceptCheckBox->setChecked( false ); checkAcceptance( false ); } void LicensePage::retranslate() { ui->acceptCheckBox->setText( tr( "I accept the terms and conditions above." ) ); QString review = tr( "Please review the End User License Agreements (EULAs)." ); const auto br = QStringLiteral( "
" ); if ( !m_allLicensesOptional ) { ui->mainText->setText( tr( "This setup procedure will install proprietary " "software that is subject to licensing terms." ) + br + review ); QString mustAcceptText( tr( "If you do not agree with the terms, the setup procedure cannot continue." ) ); ui->acceptCheckBox->setToolTip( mustAcceptText ); } else { ui->mainText->setText( tr( "This setup procedure can install proprietary " "software that is subject to licensing terms " "in order to provide additional features and enhance the user " "experience." ) + br + review ); QString okAcceptText( tr( "If you do not agree with the terms, proprietary software will not " "be installed, and open source alternatives will be used instead." ) ); ui->acceptCheckBox->setToolTip( okAcceptText ); } ui->retranslateUi( this ); for ( const auto& w : m_entries ) { w->retranslateUi(); } } bool LicensePage::isNextEnabled() const { return m_isNextEnabled; } void LicensePage::updateGlobalStorage( bool v ) { Calamares::JobQueue::instance()->globalStorage()->insert( "licenseAgree", v ); } void LicensePage::checkAcceptance( bool checked ) { updateGlobalStorage( checked ); m_isNextEnabled = checked || m_allLicensesOptional; if ( !m_isNextEnabled ) { ui->acceptFrame->setStyleSheet( mustAccept ); } else { ui->acceptFrame->setStyleSheet( okAccept ); } emit nextStatusChanged( m_isNextEnabled ); } calamares-3.2.41.1/src/modules/license/LicensePage.h000066400000000000000000000047471410275732300221210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef LICENSEPAGE_H #define LICENSEPAGE_H #include "utils/NamedEnum.h" #include #include namespace Ui { class LicensePage; } class LicenseWidget; struct LicenseEntry { enum class Type { Software = 0, Driver, GpuDriver, BrowserPlugin, Codec, Package }; /// @brief Lookup table for the enums const NamedEnumTable< Type >& typeNames(); LicenseEntry( const QVariantMap& conf ); LicenseEntry( const LicenseEntry& ) = default; LicenseEntry& operator=( const LicenseEntry& ) = default; bool isValid() const { return !m_id.isEmpty(); } bool isRequired() const { return m_required; } bool isLocal() const; bool expandByDefault() const { return m_expand; } QString m_id; QString m_prettyName; QString m_prettyVendor; Type m_type = Type::Software; QUrl m_url; bool m_required = false; bool m_expand = false; }; class LicensePage : public QWidget { Q_OBJECT public: explicit LicensePage( QWidget* parent = nullptr ); void setEntries( const QList< LicenseEntry >& entriesList ); bool isNextEnabled() const; public slots: /** @brief Check if the user can continue * * The user can continue if * - none of the licenses are required, or * - the user has ticked the "OK" box. * This function calls updateGlobalStorage() as needed, and updates * the appearance of the page as needed. @p checked indicates whether * the checkbox has been ticked or not. (e.g. when @p checked is true, * you can continue regardless) */ void checkAcceptance( bool checked ); void retranslate(); signals: void nextStatusChanged( bool status ); private: /** @brief Update the global storage "licenseAgree" key. */ void updateGlobalStorage( bool v ); bool m_isNextEnabled; bool m_allLicensesOptional; ///< @brief all the licenses passed to setEntries are not-required Ui::LicensePage* ui; QList< LicenseWidget* > m_entries; }; #endif //LICENSEPAGE_H calamares-3.2.41.1/src/modules/license/LicensePage.ui000066400000000000000000000113671410275732300223030ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2015 demmm <anke62@gmail.com> SPDX-License-Identifier: GPL-3.0-or-later LicensePage 0 0 799 400 Form <h1>License Agreement</h1> Qt::AlignCenter 0 0 <Calamares license text> Qt::AlignCenter true Qt::Vertical 20 40 0 0 QFrame::NoFrame Qt::ScrollBarAlwaysOn Qt::ScrollBarAlwaysOff true 0 0 765 89 Qt::Vertical 20 40 0 Qt::Horizontal 1 20 0 0 CheckBox Qt::Horizontal 1 20 calamares-3.2.41.1/src/modules/license/LicenseViewStep.cpp000066400000000000000000000042401410275732300233320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "LicenseViewStep.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "LicensePage.h" #include "utils/Logger.h" #include CALAMARES_PLUGIN_FACTORY_DEFINITION( LicenseViewStepFactory, registerPlugin< LicenseViewStep >(); ) LicenseViewStep::LicenseViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new LicensePage ) { emit nextStatusChanged( false ); connect( m_widget, &LicensePage::nextStatusChanged, this, &LicenseViewStep::nextStatusChanged ); } LicenseViewStep::~LicenseViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString LicenseViewStep::prettyName() const { return tr( "License" ); } QWidget* LicenseViewStep::widget() { return m_widget; } bool LicenseViewStep::isNextEnabled() const { return m_widget->isNextEnabled(); } bool LicenseViewStep::isBackEnabled() const { return true; } bool LicenseViewStep::isAtBeginning() const { return true; } bool LicenseViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > LicenseViewStep::jobs() const { return QList< Calamares::job_ptr >(); } void LicenseViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { QList< LicenseEntry > entriesList; if ( configurationMap.contains( "entries" ) && configurationMap.value( "entries" ).type() == QVariant::List ) { const auto entries = configurationMap.value( "entries" ).toList(); for ( const QVariant& entryV : entries ) { if ( entryV.type() != QVariant::Map ) { continue; } LicenseEntry entry( entryV.toMap() ); if ( entry.isValid() ) { entriesList.append( entry ); } } } m_widget->setEntries( entriesList ); } calamares-3.2.41.1/src/modules/license/LicenseViewStep.h000066400000000000000000000023201410275732300227740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Anke Boersma * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LICENSEPAGEPLUGIN_H #define LICENSEPAGEPLUGIN_H #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include #include class LicensePage; class PLUGINDLLEXPORT LicenseViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit LicenseViewStep( QObject* parent = nullptr ); ~LicenseViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: LicensePage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LicenseViewStepFactory ) #endif // LICENSEPAGEPLUGIN_H calamares-3.2.41.1/src/modules/license/LicenseWidget.cpp000066400000000000000000000144371410275732300230200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "LicenseWidget.h" #include "utils/Logger.h" #include "utils/QtCompat.h" #include #include #include #include #include #include static QString loadLocalFile( const QUrl& u ) { if ( !u.isLocalFile() ) { return QString(); } QFile file( u.path() ); if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) ) { cWarning() << "Could not load license file" << u.path(); return QString(); } return QString( "\n" ) + file.readAll(); } LicenseWidget::LicenseWidget( LicenseEntry entry, QWidget* parent ) : QWidget( parent ) , m_entry( std::move( entry ) ) , m_label( new QLabel( this ) ) , m_viewLicenseButton( new QPushButton( this ) ) , m_licenceTextLabel( new QLabel( this ) ) , m_isExpanded( m_entry.expandByDefault() ) { QPalette pal( palette() ); pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); setObjectName( "licenseItem" ); setAutoFillBackground( true ); setPalette( pal ); setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ); setContentsMargins( 4, 4, 4, 4 ); QVBoxLayout* vLayout = new QVBoxLayout; QWidget* topPart = new QWidget( this ); topPart->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); vLayout->addWidget( topPart ); QHBoxLayout* wiLayout = new QHBoxLayout; topPart->setLayout( wiLayout ); m_label->setWordWrap( true ); m_label->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); wiLayout->addWidget( m_label ); wiLayout->addSpacing( 10 ); m_viewLicenseButton->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ); wiLayout->addWidget( m_viewLicenseButton ); m_licenceTextLabel->setStyleSheet( "border-top: 1px solid black; margin-top: 0px; padding-top: 1em;" ); m_licenceTextLabel->setObjectName( "licenseItemFullText" ); if ( m_entry.isLocal() ) { m_fullTextContents = loadLocalFile( m_entry.m_url ); showLocalLicenseText(); connect( m_viewLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::expandClicked ); } else { m_licenceTextLabel->setText( tr( "URL: %1" ).arg( m_entry.m_url.toDisplayString() ) ); connect( m_viewLicenseButton, &QAbstractButton::clicked, this, &LicenseWidget::viewClicked ); } m_licenceTextLabel->setSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); vLayout->addWidget( m_licenceTextLabel ); setLayout( vLayout ); retranslateUi(); } LicenseWidget::~LicenseWidget() {} void LicenseWidget::retranslateUi() { QString productDescription; switch ( m_entry.m_type ) { case LicenseEntry::Type::Driver: //: %1 is an untranslatable product name, example: Creative Audigy driver productDescription = tr( "%1 driver
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::GpuDriver: //: %1 is usually a vendor name, example: Nvidia graphics driver productDescription = tr( "%1 graphics driver
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::BrowserPlugin: productDescription = tr( "%1 browser plugin
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Codec: productDescription = tr( "%1 codec
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Package: productDescription = tr( "%1 package
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); break; case LicenseEntry::Type::Software: productDescription = tr( "%1
" "by %2" ) .arg( m_entry.m_prettyName ) .arg( m_entry.m_prettyVendor ); } m_label->setText( productDescription ); updateExpandToolTip(); } void LicenseWidget::showLocalLicenseText() { if ( m_isExpanded ) { m_licenceTextLabel->setText( m_fullTextContents ); } else { QString fileName = m_entry.m_url.toDisplayString(); if ( fileName.startsWith( "file:" ) ) { fileName = fileName.remove( 0, 5 ); } m_licenceTextLabel->setText( tr( "File: %1" ).arg( fileName ) ); } } void LicenseWidget::expandClicked() { m_isExpanded = !m_isExpanded; // Show/hide based on the new arrow direction. if ( !m_fullTextContents.isEmpty() ) { showLocalLicenseText(); } updateExpandToolTip(); } /** @brief Called on retranslate and when button state changes. */ void LicenseWidget::updateExpandToolTip() { if ( m_entry.isLocal() ) { m_viewLicenseButton->setText( m_isExpanded ? tr( "Hide license text" ) : tr( "Show the license text" ) ); } else { m_viewLicenseButton->setText( tr( "Open license agreement in browser." ) ); } } void LicenseWidget::viewClicked() { QDesktopServices::openUrl( m_entry.m_url ); } calamares-3.2.41.1/src/modules/license/LicenseWidget.h000066400000000000000000000022671410275732300224630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef LICENSE_LICENSEWIDGET_H #define LICENSE_LICENSEWIDGET_H #include "LicensePage.h" #include #include class QPushButton; class LicenseWidget : public QWidget { public: LicenseWidget( LicenseEntry e, QWidget* parent = nullptr ); ~LicenseWidget() override; void retranslateUi(); private: void showLocalLicenseText(); // Display (or hide) the local license text void expandClicked(); // "slot" to toggle show/hide of local license text void viewClicked(); // "slot" to open link void updateExpandToolTip(); LicenseEntry m_entry; QLabel* m_label; QPushButton* m_viewLicenseButton; QLabel* m_licenceTextLabel; QString m_fullTextContents; bool m_isExpanded; }; #endif calamares-3.2.41.1/src/modules/license/README.md000066400000000000000000000021341410275732300210340ustar00rootroot00000000000000### License Approval Module 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. An example of where the licenseAgree globalstorage entry is used: https://github.com/KaOSx/calamares/blob/master/src/modules/nonfree_drivers/main.py ![License Page](http://wstaw.org/m/2015/09/14/Screenshot_20150914_113333.png) calamares-3.2.41.1/src/modules/license/license.conf000066400000000000000000000050511410275732300220470ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration file for License viewmodule, Calamares # Syntax is YAML 1.2 --- # Define a list of licenses which may / must be accepted before continuing. # # Each entry in this list has the following keys: # - id Entry identifier, must be unique. Not user visible. YAML: string. # - name Pretty name for the software product, user visible and untranslatable. YAML: string. # - vendor Pretty name for the software vendor, user visible and untranslatable. YAML: string, optional, default is empty. # - type Package type identifier for presentation, not user visible but affects user visible strings. YAML: string. # values: driver, gpudriver, browserplugin, codec, package, software; optional, default is software. # - required If set to true, the user cannot proceed without accepting this license. YAML: boolean, optional, default is false. # - url A URL for the license; a remote URL is not shown in Calamares, but a link # to the URL is provided, which opens in the default web browser. A local # URL (i.e. file:///) assumes that the contents are HTML or plain text, and # displays the license in-line. YAML: string, mandatory. # - expand A boolean value only relevant for **local** URLs. If true, # the license text is displayed in "expanded" form by # default, rather than requiring the user to first open it up. # YAML: boolean, optional, default is false. entries: - id: nvidia name: Nvidia vendor: Nvidia Corporation type: driver url: http://developer.download.nvidia.com/cg/Cg_3.0/license.pdf required: false - id: amd name: Catalyst vendor: "Advanced Micro Devices, Inc." type: gpudriver url: http://support.amd.com/en-us/download/eula required: false - id: flashplugin name: Adobe Flash vendor: Adobe Systems Incorporated type: browserplugin url: http://www.adobe.com/products/eulas/pdfs/PlatformClients_PC_WWEULA_Combined_20100108_1657.pdf required: true # This example uses a file: link. This example uses a relative link, which # is relative to where you run Calamares. Assuming you run it from build/ # as part of your testing, you'll get the LICENSE text for Calamares # (which is the text of the GPLv3, not proprietary at all). - id: mine_mine name: Calamares Proprietary License vendor: Calamares, Inc. type: software required: true url: file:../LICENSE expand: true calamares-3.2.41.1/src/modules/license/license.schema.yaml000066400000000000000000000012711410275732300233230ustar00rootroot00000000000000# 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 } calamares-3.2.41.1/src/modules/locale/000077500000000000000000000000001410275732300173725ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/locale/CMakeLists.txt000066400000000000000000000025611410275732300221360ustar00rootroot00000000000000# === 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. option( DEBUG_TIMEZONES "Debug-friendly timezone widget." OFF ) if( DEBUG_TIMEZONES ) add_definitions( -DDEBUG_TIMEZONES ) endif() include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) calamares_add_plugin( locale TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ${geoip_src} Config.cpp LCLocaleDialog.cpp LocaleConfiguration.cpp LocalePage.cpp LocaleViewStep.cpp SetTimezoneJob.cpp timezonewidget/timezonewidget.cpp timezonewidget/TimeZoneImage.cpp UI RESOURCES locale.qrc LINK_PRIVATE_LIBRARIES Qt5::Network ${geoip_libs} yamlcpp::yamlcpp SHARED_LIB ) 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 ) calamares-3.2.41.1/src/modules/locale/Config.cpp000066400000000000000000000430731410275732300213120ustar00rootroot00000000000000/* === 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 "SetTimezoneJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "locale/Global.h" #include "locale/Label.h" #include "modulesystem/ModuleManager.h" #include "network/Manager.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include /** @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 ) { 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 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 ) { 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; } localeGenLines.append( lineString ); } } if ( 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 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. 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. // Also simplify whitespace. auto unredundant = []( QString& s ) { if ( s.endsWith( " UTF-8" ) ) { s.chop( 6 ); } 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 ); } } void Config::setCurrentLocation( const QString& regionzone ) { auto r = CalamaresUtils::GeoIP::splitTZString( regionzone ); if ( r.isValid() ) { setCurrentLocation( r.first, r.second ); } } void Config::setCurrentLocation( const QString& regionName, const QString& zoneName ) { using namespace CalamaresUtils::Locale; auto* zone = m_zonesModel->find( regionName, zoneName ); if ( zone ) { setCurrentLocation( zone ); } else { // Recursive, but America/New_York always exists. setCurrentLocation( QStringLiteral( "America" ), QStringLiteral( "New_York" ) ); } } void Config::setCurrentLocation( const CalamaresUtils::Locale::TimeZoneData* location ) { if ( location != m_currentLocation ) { m_currentLocation = location; // Overwrite those settings that have not been made explicit. auto newLocale = automaticLocaleConfiguration(); if ( !m_selectedLocaleConfiguration.explicit_lang ) { setLanguage( newLocale.language() ); } 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; emit currentLCStatusChanged( currentLCStatus() ); } emit currentLocationChanged( m_currentLocation ); // Other signals come from the LocationChanged signal } } LocaleConfiguration Config::automaticLocaleConfiguration() const { // Special case: no location has been set at **all** if ( !currentLocation() ) { return LocaleConfiguration(); } return LocaleConfiguration::fromLanguageAndLocation( QLocale().name(), supportedLocales(), currentLocation()->country() ); } LocaleConfiguration Config::localeConfiguration() const { 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::Label; Label lang( s, Label::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 { QStringList l { currentLocationStatus(), currentLanguageStatus(), currentLCStatus() }; return l.join( QStringLiteral( "
" ) ); } static inline void getLocaleGenLines( const QVariantMap& configurationMap, QStringList& localeGenLines ) { 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(); } calamares-3.2.41.1/src/modules/locale/Config.h000066400000000000000000000176531410275732300207640ustar00rootroot00000000000000/* === 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 LOCALE_CONFIG_H #define LOCALE_CONFIG_H #include "LocaleConfiguration.h" #include "Job.h" #include "geoip/Handler.h" #include "geoip/Interface.h" #include "locale/TimeZone.h" #include #include #include class Config : public QObject { Q_OBJECT 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() override; void setConfigurationMap( const QVariantMap& ); void finalizeGlobalStorage() const; Calamares::JobList createJobs(); /// 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::TimeZoneData* currentLocation_c() const { return const_cast< CalamaresUtils::Locale::TimeZoneData* >( m_currentLocation ); } 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 ); /** @brief Sets a location by full name * * @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 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 ); /** @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 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; }; #endif calamares-3.2.41.1/src/modules/locale/LCLocaleDialog.cpp000066400000000000000000000054221410275732300226370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "LCLocaleDialog.h" #include #include #include #include #include LCLocaleDialog::LCLocaleDialog( const QString& guessedLCLocale, const QStringList& localeGenLines, QWidget* parent ) : QDialog( parent ) { setModal( true ); setWindowTitle( tr( "System locale setting" ) ); QBoxLayout* mainLayout = new QVBoxLayout; setLayout( mainLayout ); QLabel* upperText = new QLabel( this ); upperText->setWordWrap( true ); upperText->setText( tr( "The system locale setting affects the language and character " "set for some command line user interface elements.
" "The current setting is %1." ) .arg( guessedLCLocale ) ); mainLayout->addWidget( upperText ); setMinimumWidth( upperText->fontMetrics().height() * 24 ); m_localesWidget = new QListWidget( this ); m_localesWidget->addItems( localeGenLines ); m_localesWidget->setSelectionMode( QAbstractItemView::SingleSelection ); mainLayout->addWidget( m_localesWidget ); int selected = -1; for ( int i = 0; i < localeGenLines.count(); ++i ) { if ( localeGenLines[ i ].contains( guessedLCLocale ) ) { selected = i; break; } } QDialogButtonBox* dbb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this ); dbb->button( QDialogButtonBox::Cancel )->setText( tr( "&Cancel" ) ); dbb->button( QDialogButtonBox::Ok )->setText( tr( "&OK" ) ); mainLayout->addWidget( dbb ); connect( dbb->button( QDialogButtonBox::Ok ), &QPushButton::clicked, this, &QDialog::accept ); 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 ); } } ); if ( selected > -1 ) { m_localesWidget->setCurrentRow( selected ); } } QString LCLocaleDialog::selectedLCLocale() { return m_localesWidget->selectedItems().first()->text(); } calamares-3.2.41.1/src/modules/locale/LCLocaleDialog.h000066400000000000000000000012741410275732300223050ustar00rootroot00000000000000/* === 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 LCLOCALEDIALOG_H #define LCLOCALEDIALOG_H #include class QListWidget; class LCLocaleDialog : public QDialog { Q_OBJECT public: explicit LCLocaleDialog( const QString& guessedLCLocale, const QStringList& localeGenLines, QWidget* parent = nullptr ); QString selectedLCLocale(); private: QListWidget* m_localesWidget; }; #endif // LCLOCALEDIALOG_H calamares-3.2.41.1/src/modules/locale/LocaleConfiguration.cpp000066400000000000000000000254771410275732300240440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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 "LocaleConfiguration.h" #include "utils/Logger.h" #include #include LocaleConfiguration::LocaleConfiguration() : explicit_lang( false ) , explicit_lc( false ) { } LocaleConfiguration::LocaleConfiguration( const QString& localeName, const QString& formatsName ) : LocaleConfiguration() { lc_numeric = lc_time = lc_monetary = lc_paper = lc_name = lc_address = lc_telephone = lc_measurement = lc_identification = formatsName; setLanguage( localeName ); } void LocaleConfiguration::setLanguage( const QString& localeName ) { QString language = localeName.split( '_' ).first(); m_languageLocaleBcp47 = QLocale( language ).bcp47Name().toLower(); m_lang = localeName; } LocaleConfiguration LocaleConfiguration::fromLanguageAndLocation( const QString& languageLocale, const QStringList& availableLocales, const QString& countryCode ) { QString language = languageLocale.split( '_' ).first(); // Either an exact match, or the whole language part matches // (followed by . or _ QStringList linesForLanguage = availableLocales.filter( QRegularExpression( language + "[._]" ) ); QString lang; if ( linesForLanguage.length() == 0 || languageLocale.isEmpty() ) { lang = "en_US.UTF-8"; } else if ( linesForLanguage.length() == 1 ) { lang = linesForLanguage.first(); } // lang could still be empty if we found multiple locales that satisfy myLanguage // The following block was inspired by Ubiquity, scripts/localechooser-apply. // No copyright statement found in file, assuming GPL v2 or later. /* # In the special cases of Portuguese and Chinese, selecting a # different location may imply a different dialect of the language. # In such cases, make LANG reflect the selected language (for # messages, character types, and collation) and make the other # locale categories reflect the selected location. */ if ( language == "pt" || language == "zh" ) { QString proposedLocale = QString( "%1_%2" ).arg( language ).arg( countryCode ); for ( const QString& line : linesForLanguage ) { if ( line.contains( proposedLocale ) ) { lang = line; break; } } } // If we found no good way to set a default lang, do a search with the whole // language locale and pick the first result, if any. if ( lang.isEmpty() ) { for ( const QString& line : availableLocales ) { if ( line.startsWith( languageLocale ) ) { lang = line; break; } } } // Else we have an unrecognized or unsupported locale, all we can do is go with // en_US.UTF-8 UTF-8. This completes all default language setting guesswork. if ( lang.isEmpty() ) { lang = "en_US.UTF-8"; } // The following block was inspired by Ubiquity, scripts/localechooser-apply. // No copyright statement found in file, assuming GPL v2 or later. /* # It is relatively common for the combination of language and location (as # selected on the timezone page) not to identify a supported combined # locale. For example, this happens when the user is a migrant, or when # they prefer to use a different language to interact with their computer # because that language is better-supported. # # In such cases, we would like to be able to use a locale reflecting the # selected language in LANG for messages, character types, and collation, # and to make the other locale categories reflect the selected location. # This means that we have to guess at a suitable locale for the selected # location, and we do not want to ask yet another locale-related question. # Nevertheless, some cases are ambiguous: a user who has asked for the # English language and identifies their location as Switzerland will get # different numeric representation depending on which Swiss locale we pick. # # The goal of identifying a reasonable default for migrants makes things # easier: it is reasonable to default to French for France despite the # existence of several minority languages there, because anyone who prefers # those languages will probably already have selected them and won't arrive # here. However, in some cases we're unsure, and in some cases we actively # don't want to pick a "preferred" language: selecting either Greek or # Turkish as the default language for migrants to Cyprus would probably # offend somebody! In such cases we simply punt to the old behaviour of not # setting up a locale reflecting the location, which is suboptimal but is at # least unlikely to give offence. # # Our best shot at general criteria for selecting a default language in # these circumstances are as follows: # # * Exclude special-purpose (e.g. en_DK) and artificial (e.g. la_AU, # tlh_GB) locales. # * If there is a language specific to or very strongly associated with the # country in question, prefer it unless it has rather few native # speakers. # * Exclude minority languages that are relatively unlikely to be spoken by # migrants who have not already selected them as their preferred language # earlier in the installer. # * If there is an official national language likely to be seen in print # media, road signs, etc., then prefer that. # * In cases of doubt, selecting no default language is safe. */ // We make a proposed locale based on the UI language and the timezone's country. There is no // guarantee that this will be a valid, supported locale (often it won't). QString lc_formats; QString combined = QString( "%1_%2" ).arg( language ).arg( countryCode ); // We look up if it's a supported locale. for ( const QString& line : availableLocales ) { if ( line.startsWith( combined ) ) { lang = line; lc_formats = line; break; } } if ( lc_formats.isEmpty() ) { QStringList available; for ( const QString& line : availableLocales ) { if ( line.contains( QString( "_%1" ).arg( countryCode ) ) ) { available.append( line ); } } available.sort(); if ( available.count() == 1 ) { lc_formats = available.first(); } else { QMap< QString, QString > countryToDefaultLanguage { { "AU", "en" }, { "CN", "zh" }, { "DE", "de" }, { "DK", "da" }, { "DZ", "ar" }, { "ES", "es" }, // Somewhat unclear: Oromo has the greatest number of // native speakers; English is the most widely spoken // language and taught in secondary schools; Amharic is // the official language and was taught in primary // schools. { "ET", "am" }, { "FI", "fi" }, { "FR", "fr" }, { "GB", "en" }, // Irish (Gaelic) is strongly associated with Ireland, // but nearly all its native speakers also speak English, // and migrants are likely to use English. { "IE", "en" }, { "IT", "it" }, { "MA", "ar" }, { "MK", "mk" }, { "NG", "en" }, { "NL", "nl" }, { "NZ", "en" }, { "IL", "he" }, // Filipino is a de facto version of Tagalog, which is // also spoken; English is also an official language. { "PH", "fil" }, { "PK", "ur" }, { "PL", "pl" }, { "RU", "ru" }, // Chinese has more speakers, but English is the "common // language of the nation" (Wikipedia) and official // documents must be translated into English to be // accepted. { "SG", "en" }, { "SN", "wo" }, { "TR", "tr" }, { "TW", "zh" }, { "UA", "uk" }, { "US", "en" }, { "ZM", "en" } }; if ( countryToDefaultLanguage.contains( countryCode ) ) { QString combinedLocale = QString( "%1_%2" ).arg( countryToDefaultLanguage.value( countryCode ) ).arg( countryCode ); for ( const QString& line : availableLocales ) { if ( line.startsWith( combinedLocale ) ) { lc_formats = line; break; } } } } } // If we cannot make a good choice for a given country we go with the LANG // setting, which defaults to en_US.UTF-8 UTF-8 if all else fails. if ( lc_formats.isEmpty() ) { lc_formats = lang; } return LocaleConfiguration( lang, lc_formats ); } bool LocaleConfiguration::isEmpty() const { return m_lang.isEmpty() && lc_numeric.isEmpty() && lc_time.isEmpty() && lc_monetary.isEmpty() && lc_paper.isEmpty() && lc_name.isEmpty() && lc_address.isEmpty() && lc_telephone.isEmpty() && lc_measurement.isEmpty() && lc_identification.isEmpty(); } /// @brief Sets @p value on @p key in the @p map if @p value is non-empty static inline void add_lc( QMap< QString, QString >& map, const char* key, const QString& value ) { if ( !value.isEmpty() ) { map.insert( key, value ); } } QMap< QString, QString > LocaleConfiguration::toMap() const { QMap< QString, QString > map; add_lc( map, "LANG", m_lang ); add_lc( map, "LC_NUMERIC", lc_numeric ); add_lc( map, "LC_TIME", lc_time ); add_lc( map, "LC_MONETARY", lc_monetary ); add_lc( map, "LC_PAPER", lc_paper ); add_lc( map, "LC_NAME", lc_name ); add_lc( map, "LC_ADDRESS", lc_address ); add_lc( map, "LC_TELEPHONE", lc_telephone ); add_lc( map, "LC_MEASUREMENT", lc_measurement ); add_lc( map, "LC_IDENTIFICATION", lc_identification ); return map; } calamares-3.2.41.1/src/modules/locale/LocaleConfiguration.h000066400000000000000000000061261410275732300234770ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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. * */ #ifndef LOCALECONFIGURATION_H #define LOCALECONFIGURATION_H #include #include #include class LocaleConfiguration { 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 * * 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 language to @p localeName * * 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; } /// 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 , 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; // If the user has explicitly selected language (from the dialog) // or numbers format, set these to avoid implicit changes to them. bool explicit_lang, explicit_lc; private: QString m_lang; QString m_languageLocaleBcp47; }; inline QDebug& operator<<( QDebug& s, const LocaleConfiguration& l ) { return s << l.language() << '(' << l.toBcp47() << ") +" << l.lc_numeric; } #endif // LOCALECONFIGURATION_H calamares-3.2.41.1/src/modules/locale/LocalePage.cpp000066400000000000000000000161711410275732300221000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "LocalePage.h" #include "Config.h" #include "LCLocaleDialog.h" #include "timezonewidget/timezonewidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/RAII.h" #include "utils/Retranslator.h" #include #include #include #include #include LocalePage::LocalePage( Config* config, QWidget* parent ) : QWidget( parent ) , m_config( config ) , m_blockTzWidgetSet( false ) { QBoxLayout* mainLayout = new QVBoxLayout; QBoxLayout* tzwLayout = new QHBoxLayout; m_tzWidget = new TimeZoneWidget( m_config->zonesModel(), this ); tzwLayout->addStretch(); tzwLayout->addWidget( m_tzWidget ); tzwLayout->addStretch(); // 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 ); zoneAndRegionLayout->addWidget( m_regionLabel ); m_regionCombo = new QComboBox( this ); zoneAndRegionLayout->addWidget( m_regionCombo ); m_regionCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); m_regionLabel->setBuddy( m_regionCombo ); zoneAndRegionLayout->addSpacing( 20 ); m_zoneLabel = new QLabel( this ); zoneAndRegionLayout->addWidget( m_zoneLabel ); m_zoneCombo = new QComboBox( this ); m_zoneCombo->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); zoneAndRegionLayout->addWidget( m_zoneCombo ); m_zoneLabel->setBuddy( m_zoneCombo ); QBoxLayout* localeLayout = new QHBoxLayout; m_localeLabel = new QLabel( this ); m_localeLabel->setWordWrap( true ); m_localeLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); localeLayout->addWidget( m_localeLabel ); m_localeChangeButton = new QPushButton( this ); m_localeChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); localeLayout->addWidget( m_localeChangeButton ); QBoxLayout* formatsLayout = new QHBoxLayout; m_formatsLabel = new QLabel( this ); m_formatsLabel->setWordWrap( true ); m_formatsLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); formatsLayout->addWidget( m_formatsLabel ); m_formatsChangeButton = new QPushButton( this ); m_formatsChangeButton->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); formatsLayout->addWidget( m_formatsChangeButton ); 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_localeChangeButton, &QPushButton::clicked, this, &LocalePage::changeLocale ); connect( m_formatsChangeButton, &QPushButton::clicked, this, &LocalePage::changeFormats ); CALAMARES_RETRANSLATE_SLOT( &LocalePage::updateLocaleLabels ); } LocalePage::~LocalePage() {} void LocalePage::updateLocaleLabels() { m_regionLabel->setText( tr( "Region:" ) ); m_zoneLabel->setText( tr( "Zone:" ) ); m_localeChangeButton->setText( tr( "&Change..." ) ); m_formatsChangeButton->setText( tr( "&Change..." ) ); m_localeLabel->setText( m_config->currentLanguageStatus() ); m_formatsLabel->setText( m_config->currentLCStatus() ); } void LocalePage::onActivate() { m_regionCombo->setFocus(); updateLocaleLabels(); } void LocalePage::regionChanged( int currentIndex ) { using namespace CalamaresUtils::Locale; QString selectedRegion = m_regionCombo->itemData( currentIndex ).toString(); { cSignalBlocker z( m_zoneCombo ); m_config->regionalZonesModel()->setRegion( selectedRegion ); } m_zoneCombo->currentIndexChanged( 0 ); } void LocalePage::zoneChanged( int currentIndex ) { if ( !m_blockTzWidgetSet ) { m_config->setCurrentLocation( m_regionCombo->currentData().toString(), m_zoneCombo->itemData( currentIndex ).toString() ); } } void LocalePage::locationChanged( const CalamaresUtils::Locale::TimeZoneData* location ) { if ( !location ) { return; } cBoolSetter< true > b( m_blockTzWidgetSet ); // Set region index int index = m_regionCombo->findData( location->region() ); if ( index < 0 ) { return; } m_regionCombo->setCurrentIndex( index ); // Set zone index index = m_zoneCombo->findData( location->zone() ); if ( index < 0 ) { return; } m_zoneCombo->setCurrentIndex( index ); } void LocalePage::changeLocale() { QPointer< LCLocaleDialog > dlg( new LCLocaleDialog( m_config->localeConfiguration().language(), m_config->supportedLocales(), this ) ); dlg->exec(); if ( dlg && dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { m_config->setLanguageExplicitly( dlg->selectedLCLocale() ); updateLocaleLabels(); } delete dlg; } void LocalePage::changeFormats() { QPointer< LCLocaleDialog > dlg( new LCLocaleDialog( m_config->localeConfiguration().lc_numeric, m_config->supportedLocales(), this ) ); dlg->exec(); if ( dlg && dlg->result() == QDialog::Accepted && !dlg->selectedLCLocale().isEmpty() ) { m_config->setLCLocaleExplicitly( dlg->selectedLCLocale() ); updateLocaleLabels(); } delete dlg; } calamares-3.2.41.1/src/modules/locale/LocalePage.h000066400000000000000000000026371410275732300215470ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LOCALEPAGE_H #define LOCALEPAGE_H #include "LocaleConfiguration.h" #include "Job.h" #include "locale/TimeZone.h" #include #include class QComboBox; class QLabel; class QPushButton; class Config; class TimeZoneWidget; class LocalePage : public QWidget { Q_OBJECT public: explicit LocalePage( class Config* config, QWidget* parent = nullptr ); ~LocalePage() override; void onActivate(); private: /// @brief Non-owning pointer to the ViewStep's config Config* m_config; void updateLocaleLabels(); void regionChanged( int currentIndex ); void zoneChanged( int currentIndex ); void locationChanged( const CalamaresUtils::Locale::TimeZoneData* location ); void changeLocale(); void changeFormats(); TimeZoneWidget* m_tzWidget; QComboBox* m_regionCombo; QComboBox* m_zoneCombo; QLabel* m_regionLabel; QLabel* m_zoneLabel; QLabel* m_localeLabel; QPushButton* m_localeChangeButton; QLabel* m_formatsLabel; QPushButton* m_formatsChangeButton; bool m_blockTzWidgetSet; }; #endif // LOCALEPAGE_H calamares-3.2.41.1/src/modules/locale/LocaleViewStep.cpp000066400000000000000000000051511410275732300227660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 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 "LocaleViewStep.h" #include "LocalePage.h" #include "widgets/WaitingWidget.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 #include CALAMARES_PLUGIN_FACTORY_DEFINITION( LocaleViewStepFactory, registerPlugin< LocaleViewStep >(); ) LocaleViewStep::LocaleViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new QWidget() ) , m_actualWidget( nullptr ) , m_nextEnabled( false ) , m_config( std::make_unique< Config >() ) { QBoxLayout* mainLayout = new QHBoxLayout; m_widget->setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); emit nextStatusChanged( m_nextEnabled ); } LocaleViewStep::~LocaleViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } void LocaleViewStep::setUpPage() { m_config->setCurrentLocation(); if ( !m_actualWidget ) { m_actualWidget = new LocalePage( m_config.get() ); } m_widget->layout()->addWidget( m_actualWidget ); ensureSize( m_actualWidget->sizeHint() ); m_nextEnabled = true; emit nextStatusChanged( m_nextEnabled ); } QString LocaleViewStep::prettyName() const { return tr( "Location" ); } QString LocaleViewStep::prettyStatus() const { return m_config->prettyStatus(); } QWidget* LocaleViewStep::widget() { return m_widget; } bool LocaleViewStep::isNextEnabled() const { return m_nextEnabled; } bool LocaleViewStep::isBackEnabled() const { return true; } bool LocaleViewStep::isAtBeginning() const { return true; } bool LocaleViewStep::isAtEnd() const { return true; } Calamares::JobList LocaleViewStep::jobs() const { return m_config->createJobs(); } void LocaleViewStep::onActivate() { m_config->setCurrentLocation(); // Finalize the location if ( !m_actualWidget ) { setUpPage(); } m_actualWidget->onActivate(); } void LocaleViewStep::onLeave() { m_config->finalizeGlobalStorage(); } void LocaleViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/locale/LocaleViewStep.h000066400000000000000000000026341410275732300224360ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 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 LOCALEVIEWSTEP_H #define LOCALEVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include class LocalePage; class PLUGINDLLEXPORT LocaleViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit LocaleViewStep( QObject* parent = nullptr ); ~LocaleViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() 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; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private slots: void setUpPage(); private: QWidget* m_widget; LocalePage* m_actualWidget; bool m_nextEnabled; std::unique_ptr< Config > m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LocaleViewStepFactory ) #endif // LOCALEVIEWSTEP_H calamares-3.2.41.1/src/modules/locale/SetTimezoneJob.cpp000066400000000000000000000055411410275732300230040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2015 Rohan Garg * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "SetTimezoneJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include SetTimezoneJob::SetTimezoneJob( const QString& region, const QString& zone ) : Calamares::Job() , m_region( region ) , m_zone( zone ) { } QString SetTimezoneJob::prettyName() const { return tr( "Set timezone to %1/%2" ).arg( m_region ).arg( m_zone ); } Calamares::JobResult SetTimezoneJob::exec() { // do not call timedatectl in a chroot, it is not safe (timedatectl talks // to a running timedated over D-Bus), and we have code that works if ( !Calamares::Settings::instance()->doChroot() ) { int ec = CalamaresUtils::System::instance()->targetEnvCall( { "timedatectl", "set-timezone", m_region + '/' + m_zone } ); if ( !ec ) { return Calamares::JobResult::ok(); } } QString localtimeSlink( "/etc/localtime" ); QString zoneinfoPath( "/usr/share/zoneinfo" ); zoneinfoPath.append( QDir::separator() + m_region ); zoneinfoPath.append( QDir::separator() + m_zone ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QFileInfo zoneFile( gs->value( "rootMountPoint" ).toString() + zoneinfoPath ); if ( !zoneFile.exists() || !zoneFile.isReadable() ) return Calamares::JobResult::error( tr( "Cannot access selected timezone path." ), tr( "Bad path: %1" ).arg( zoneFile.absolutePath() ) ); // Make sure /etc/localtime doesn't exist, otherwise symlinking will fail CalamaresUtils::System::instance()->targetEnvCall( { "rm", "-f", localtimeSlink } ); int ec = CalamaresUtils::System::instance()->targetEnvCall( { "ln", "-s", zoneinfoPath, localtimeSlink } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set timezone." ), tr( "Link creation failed, target: %1; link name: %2" ).arg( zoneinfoPath ).arg( "/etc/localtime" ) ); QFile timezoneFile( gs->value( "rootMountPoint" ).toString() + "/etc/timezone" ); if ( !timezoneFile.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) ) return Calamares::JobResult::error( tr( "Cannot set timezone," ), tr( "Cannot open /etc/timezone for writing" ) ); QTextStream out( &timezoneFile ); out << m_region << '/' << m_zone << "\n"; timezoneFile.close(); return Calamares::JobResult::ok(); } calamares-3.2.41.1/src/modules/locale/SetTimezoneJob.h000066400000000000000000000011661410275732300224500ustar00rootroot00000000000000/* === 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 SETTIMEZONEJOB_H #define SETTIMEZONEJOB_H #include "Job.h" class SetTimezoneJob : public Calamares::Job { Q_OBJECT public: SetTimezoneJob( const QString& region, const QString& zone ); QString prettyName() const override; Calamares::JobResult exec() override; private: QString m_region; QString m_zone; }; #endif /* SETTIMEZONEJOB_H */ calamares-3.2.41.1/src/modules/locale/Tests.cpp000066400000000000000000000165501410275732300212070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "Config.h" #include "LocaleConfiguration.h" #include "timezonewidget/TimeZoneImage.h" #include "locale/TimeZone.h" #include "utils/Logger.h" #include #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() {} LocaleTests::~LocaleTests() {} void LocaleTests::initTestCase() { } void LocaleTests::testEmptyLocaleConfiguration() { LocaleConfiguration lc; QVERIFY( lc.isEmpty() ); QCOMPARE( lc.toBcp47(), QString() ); } void LocaleTests::testDefaultLocaleConfiguration() { LocaleConfiguration lc( "en_US.UTF-8" ); QVERIFY( !lc.isEmpty() ); QCOMPARE( lc.language(), QStringLiteral( "en_US.UTF-8" ) ); QCOMPARE( lc.toBcp47(), QStringLiteral( "en" ) ); LocaleConfiguration lc2( "de_DE.UTF-8" ); QVERIFY( !lc2.isEmpty() ); QCOMPARE( lc2.language(), QStringLiteral( "de_DE.UTF-8" ) ); QCOMPARE( lc2.toBcp47(), QStringLiteral( "de" ) ); } void LocaleTests::testSplitLocaleConfiguration() { LocaleConfiguration lc( "en_US.UTF-8", "de_DE.UTF-8" ); QVERIFY( !lc.isEmpty() ); QCOMPARE( lc.language(), QStringLiteral( "en_US.UTF-8" ) ); QCOMPARE( lc.toBcp47(), QStringLiteral( "en" ) ); QCOMPARE( lc.lc_numeric, QStringLiteral( "de_DE.UTF-8" ) ); LocaleConfiguration lc2( "de_DE.UTF-8", "da_DK.UTF-8" ); QVERIFY( !lc2.isEmpty() ); QCOMPARE( lc2.language(), QStringLiteral( "de_DE.UTF-8" ) ); QCOMPARE( lc2.toBcp47(), QStringLiteral( "de" ) ); QCOMPARE( lc2.lc_numeric, QStringLiteral( "da_DK.UTF-8" ) ); LocaleConfiguration lc3( "da_DK.UTF-8", "de_DE.UTF-8" ); QVERIFY( !lc3.isEmpty() ); 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" calamares-3.2.41.1/src/modules/locale/images/000077500000000000000000000000001410275732300206375ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/locale/images/bg.png000066400000000000000000005260221410275732300217440ustar00rootroot00000000000000PNG  IHDR T_,gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs B(xIDATxwٖ6yqι羧ޱme $D9$D9%2Y]{׮;Z,\eʵX1~a<8/])7q'f>s޿._AWEW>Wp3 m|D"`H1yr _+P)_4,t1519Kp~(ė L ]," _^"/l}rDdg钰U/"4E ݨE 0 }H,yl=睽e@RwP& i$=@o~Ҹy3*{n;+ѵ[|rQ<~d$IzI $=1H|H` 1 nr6Xw݀=7cELmMt8 /_z!;h$ $cxIu@HzI1H6C(ELҧ'!j "CtU!,xW=;Y8Scjc,-AQwS '6I_=&;Ip $=IG$N</zE#7P^&V~ >X]@S>$tI£)|G *Uy!gPx<"< ۆ%^,HFe1yIc"A~\!\ėzI $@HzI }9z 8`jQH.Fbt-Op15AoD OҔǢ"OiNASwǀ'F1H"&HFmxh?a'+C REF!@6o(Kmocr_'2#MPGtA9dsθIC;U$Q0k,؆ 4|HzI W|I $@Ov.'AWغ@Zt6\ C`LT1* "Gy3(R$dA*Bzv&Po{3L(A I^X^Z GgOep..1ȳÙ'xb?7zI*=I  $=>wo0t9t?F MF0H= h BCj<] T?wcR|2&Q̣O2:k%ql/a*2H /Ks&WZckSVRl9_$k'Yhl4+dfukx~xlneK+lfn3[D*6Q:ijPEau24n;wi2{zQŞqE='@\JC?uT"]hڙ*ff֚nc`nsfvd/\>=:9ޮl EGGGG'G{Gg'oNj}qajN VR(.-721r}\G9 :u4 Z?DK(MHpƈ?" =|S{*ڜ4X"G5{ !|bTȕ{$> /9=8o\<;<~(>ӓgG'p*)<9?Z(lZvqq=Y gE:ߨ"P=IV@W lSyJhI;&3H/َ![9QL%aɨ10sZe{p(pr~tp~xxq|/djV&\ #xr4kf+/ %br$tV8~ҩC CZ\`{8ǣAsL+BbfYEplzfy=%`mn0b puyUKUxYptp p9|8A' 7_>?>=:=<9'?\]\ӳf214G}@g򮫭ڜL$U7~L|ŰI!>i/?',7EC_/nybגk>DLRd$=>$o6^ 0K%ñs5lr F>_𧣉Zn:8r[pCԏ|x x ΋,Mf!HFN<'GoNq}y}3 ̣5,`Y^2&9qvKt+RY܊r"@]ޘc(<3T4Wo/NԷ3мPxJ-ݩ5ffWzT+{&DG{Px"=>>97 fRW+l~a~9MWs|6_6)_]Y\ndɹ)kX2Ԯ%:L Z窸x@jmg"UAt_uI:~ϮK))q nLGQE/ "G:>"5~Cl#z$O:p ]&f6D'=Y@Cpf(8EN.J#B_/ƤD>9Oήc\Rrji]Ӫs8ۮ6 z7?D@¾<>~{q۷w>Cg|vryb cI_O|7|1>ǚg5.-\cqh AQZ`/gs ɏ}vu~txzxn2Z#>=s3JUP; # ;PfHL-@9\M[?A"g b+ <*LqtaaNn\_X:goOvLq+LtB|B9YXl?7#LV.TVVShlNOBD&=&V[|L>Az>K4K]>q8۩n/.lm&6C8o^;=Bf}Bv `EMqgܬODOZ#a na&0|YX4-hz=Y 5RM'Ș2Z q1tpϨHpF02<<p-cFs^! sh\b'{& :Y \nn6s kSW0g[b.o)6¨Lngv/]*Z-. v >^ xsz9!=(zFNWxvv)pR(tg ӃY%9. ;>'u$NN >.Խ}v֨nڿ>:j .1'p5?xxw/M,^16d7bdGuIאQTfWFe> t ?oɃoom]mDc%c]u(MUܔl Ĕp3UAܩ3GR\< L8KxȘ<4@D"ΑY\-&gsLĔOx_O:Cp]X9?\XY/| N<4$>)6,\*GQYp3ѳU?e@'7IzI $J JFh'Dp,K* 0UrZ."Fެ|HtlN9(tC/]O܁T.[خl Bp™FTBCN^f;Vff)_Wk? ?0Zo6,Wz%1'g۵Z-O=212$)`xgk,- ]g֔b*5%XG2撙"*Rzv-3 Θ\i?(t~&_6k확Vzܽ:9lM9H,;Bbds+)NV`'SԪ;+]`/IA^I2QP & ɋr#QE[ov&;ܢM` l,-q*p0J/Jsg&@?+H<H7f4RՐ Vc5C`Kz, 3xlumkTst&Tf3TɭO`I%j8W;^#M^G43E\Ԥ%Ql_r+h1j}"D#%7O*}Z+7jKW$} 2I gNsHO04 1 IT" >Ce-ᙹBj'xp}qy|lqD̎vNO&4ί6ĴHy)lX''?\_~{~/zmsƬKO*+P-31 (W)iz.>=9?<:=\ZXo4uRG⤫һ}x~ܢ`cj Qū2WI_p ãB-o0A4X WIl 'FwXU[і Ǘw{{əمٓقf::3Q(TVr2 I֚ajni?e\P[g8Gd": 8MSklm-k0^Dl/׉{ #;X=PG$~#S)j՝f'/X*%E0i xp𤋆'u=#D$Hqn/UȕIcR[]JǗ\XX39b#@VpEs}ǜטF:?9H9 s~&}{$}E..dnwCS9jhZKjVB1;6vzpHF65ڃ]ɚze[u'r[>߹>>oo~}o$ ӾDr}Q鞹tlѪ vnt1Ui8+}l1M?C?6ӯβ0;_-~'B>=\_SjW/Ľ+Ct%G ͭoI" O, Q"@ר3ʘ=]x\,2DŽHK4ͅMwQ#ӷ {I;o'3cD!KxP&քY["'fkmƲ(]zh'U;.'FWfp4 0voPSa *mga[_mv\4&Gp{h4>kc|Hp38{ztHi$U9EG 'V7cu0e6w+3;}奍BT)VJyx5@po緤S1DTَhO?fK:7[JDmEj\$@oX1.k  Q@L؈EƱ׬<Fl|nvK ݿ:E$ #kQB1e*D4푘 @hlN0e*X;it1Zjmvv9YRW/m璙%xDFDH Рf|0=xN߰vkYxZ,{L:#ɐhDmt%p/ H3lϴt P&(KxH$)yV459c£1h;>s+͂˗hg1V`ʮ1~Y)UvvOߞ*5ȅsKT/|"8IR|O~p { `8@)b7 %H2CK=Y1lNf` Zmm=G(. 1! G8<Xy-LSF)P3$!~L3 opfkլ7N66ss^:G7 B .²bO۽ hr#2IΎ{untU۵BXsV\)=K,y%|>ˠ%cjHs=fXzX/ƍBYwL/os[f!Úga{Tڪ1i?낤Dk@,?\!O3Y2ƏQ8"um-YTA~. zW&r[)Jp_azAsU?>iDWGI]^[WBҖ&HzOLj[\J]\8!DYq5.MSU]dKm|eGI}@!sJݹ~A4! Mq\˜g&-af8&hwO>iH{E* JpuQ,0r- "<+#Xu\-Oӥ#|:>S³c$SD'&ط jmI&]bD2RUϪ=lk&l0Lmh: 0=}+SzrGL>Hj}|1g__oomʔ5{0yz~Ժ;w;hŗTFفt֞'ǞX ;DHa8"DaN>{4}ϸf쭔Ja݋OO8_ZXz2gf"c* 1[ {U$Qضōم | q t@{؜~:9?=ӚܩgT veb0gR/l5償truPoQܒۺ):u7T"p#᫖JwX?'otRi?zXDy4!x cSI "9~3  ʼnOV瘿֌ WW۷6aJCRU10qm,/ZYY nD+#W{ I;U|Mw&9'4gÍTAhp`$=_|f#.6 E%1EGgv%t"3^.V:h>JjSM" %* LIr<'0?()?.W:^ @rJ#+|xMÑ9=șLmd׶V׶֑ZA2lTk\%mCB@N"v֬{נǶ @Y RE6ѻaDlGoN/ g)AxydpbLLҝy[]{{);㘏INR佊?s\L&Ix)1f| )pPL(yFKr E碉͍*5IҚSt'ߟsXri}X.mËLbK2yG}-&̏60:"RtpRqtrt 2.d G $\ƛT] \>Nʜ I53TQp tef*xF0ÉIgNˈDf]R,%i!t܁t4-5D;|$6+V K YXXϤfWVW)K@38B _s+\#b\ȍ!#{X~ɶ=Orüiܡ7,|oV;;. q|,i-C\:9:*@ @iwOB_$1aq-Q_v͍E9ǭN~u~~t7+83ȳb81DZRш&GluH<':ɄN8I͙n{oOl%[S21*u>V8.uuwP:pREP"lLcy(=)OpQa}xrl^9;8<GNs@>ТG3Hefb lW N? )V+d':ըΉ\".糀ovk$ tufV1/KKv >od!^g;Hzbw}}zQhͱ^9/=?FvZsm0^ ӛ`5 G[jtvnEtNoPx.wۥ& 0rۄJ骥JM.%vB3,P02Y_ohxDT;>ޭ׋^A&HHk0G1 `X`|pДVFlU$<4&q{p̮x 5ܥ'GH6jl׷6j, hM!G8I'bmD<N?_›#l,l&q1FNQhޅ|gvsvoI 1y3UH! l8"B-AT_aJ,< GPMǦݙ@t1\ 5! nz6GAX:>g40DVƓ_|~Y8aemvȯE:1㣱ɧ^5>02jSQ-(^ h*ۋze;i떏=ʼnz-Jxmr !) 1.#b{hUÃ]#·tHnЬ~!]`UDhLaDHd h0ߘLexW f{TXH}<ǐ>r\hi}=IjPޭ7m %,%}c{{;D[g(B#͠ɠ_[̮,z$2V\ߟ>_)#/XZҕ(=߇/e06"˼*\ [*ոո)Uݰʿ j&7q &8'AjR/aX@?ޅdI|4!5HYڛ0n_aV%'@ҿ,Hz %m ԑ-A3$tlϙ>" VODR*K-:A 8 ^!@ 1eiS{QבMfD.u)oFb ⎟~mkRLDz%\c@|Yd|]Z@!ug}26>915Gslie%;mO<__Z=kF$i9l6UFzE`^^'86Bt+j!4cy2S1f7oє֏{{qr00h<w(%_6sx2Ϭ+TY`KOfGa!JAIͶ1_"@<›%cխv7W*cLZ~6nv%N/1dQ1wμحɾn^Ih ti4,}:gNjW a vbD:†@,p( &qm$AD^1L/铏):F/ B` h|#+M׻ n- 1,AEE@xB_%I !''3/G`BNAܽ< _$$$.|wOMOǧ̈́kĪ|:9& <@'mRGەf9D3T)BR Zn@*GKu!6$G!p-C)>l;A3hsi  [SХEhAM ^/e%c-wd d 㨵SO .gf&v;yDQ0M\+LLՃ&)W(R-R;{oDχyNg5f/3pjfR%)-/|տXۇAa! l(-NQ~&42 AR[ 5GDa]5HϬx͍lX9ݻjR)PXڄ@"YE blzДf٧6|e $Cd<0 h-ߟT$iBxXaN$zMCb)at䈌,a5ȳYBTcY\^͇TE|pc0ڌ-řUwwA~ 0[Rj2p0.leTyIE=gC@ $k#GTP_(j>U8GC`lfMIuDvߗx5E$L_$9@WIqDa_;MieDvxۘԧ4dS`AT&t:#D9DS9a"A!,CAc;>xgDn ,d7ɥ {Rf en59wpOi^'!̬VN:ZS>;%WMxl:hk[,#[EAL$--ՖpI!Xl~V/wۋs2v.ONJ|\>Gp˭Qs_]/d rހպΒX$+ܒEJ+8_'GE/=7]ǒ2 ME GADxǡ`"1"Q?E-AR֢e?UzlXaK&bV߼'f8:g}{Q^_Nh[P; Ftq:K? ֺ7)_dY:nդ#]W Yif@XnXmWV`l1YuPzb;^q=5&I9&"WTyNlkm5{qLHQk-veDD:'& 3qӓ+ͭZ ۋ4ߨlSj-}oMyx'xm%Ȁ8.@p˜`M,^g'R P<O׫5N(pK[m"D|q[_ $,峙̢v=34c6sUhrčXq}dԃmIW_2&J b"QZY+®+ԒS>HgDdH#[pL  -a# NX^r}`2/{Lv6oZ9{XRn{ py4 ,Rcp\PIWH7I[q;t&Mq5XG%b(r:G7s8ز?cr9YU仔%Atf'R+jE1<U |?o`$>R%]' ~HCT8&"Ǹ:~mɿ$IcM'c/Ij .Vw =շkkm)܋qݷC 51>9Jg8>*Ƌ$E2C:$pG vjhy%;,BҌ0 z, xfqLh]j-_blM;;9?<}k/43i|Kc 1!R>DzQO^S4lc/]yJU>SxCLeϘѰ^  +q 7(_XEgU^f|:>jL oh  A˚d&ө\_V|4>ouE\k"" Nw(ɡai+{ts#M.{[[^js|7Cҵm H]&8И,@CT_ωӮ[ ˻G4i}w+Z2 R Rqz{z'; |rfX.v^8]sي՛$tE$~SM>_^:hdeNʛX]+ma1L1]g. H'N/,nVA$T̗1 Cz4-\TX<1>0լVOxb˓1SɨI\Qu/hcG>3w#)UhDz6~9{4,sr2 ` "uHwoڢn0sOGO) *GJG#g!ijQգaw56U Ru@]'+K+:d8O66vhZb2T$ {`u+'V ?ćf,2߯IGR~7+ +_jTi^ B34zsgHe'/fV fZ{8A<\֕*E IZ.xjy+CC;]N")E^8~ r&+Z~=z|O.(`l*@R(KkX 'v;E:8v Byv8EI$CeDrllϱޚ2.lnjz"!4D[fB[?4L}eAm/HasgC9z$}m FcH]p{X}Ŷb#ik~EaNF+ǩKqLhq`&=Y*L GfU;ķ s,ɴ̮ٝ lTll\4@C 5rL|;**[O݅;7M'xpO *Mq<$qشh"N*C|G@}ҿbrTVcm]ɔ> 2T:*{5DyS.UĆ3F[wI]ˍwJ{Q JWks,2|7$r!& H5[R[tP֒꨹)Db1.$66{>[_ (KCs'J}8AE4-ɍۭ"](A*.pv&ݏeJ}}cubF57pTtjB\z.5Qx1E$$HH6HFHlm]O$D^) 䃫cx^.%GGj`woc䋮l3LMC]D0rY$+$A+%ӝ!jŨ֫I!LwҤ.TH<;fjZvPȣi#AϏ'hK Faf~=Z,ps:oY dlR{‹ҩX1">2. qMt9ml7`3CبcE oZn+'K4kRގWBs$$?s~ؒE#\g6 k` 6 B["ux-"{DM'G׸XhZĬq.mgIȽnN)rD89,rpUcJݴ$(97 ÚsϘ>Ƿԙ$O|//," ˷08]Ȼ gMKhF1b-D&46LRCI@>< '4"OUcHsjtܒq=elopu!H\ CWhp R68~ ޱrc?'nn `(8z9,tssi:9A77k P׷; #B+ Cly7"ʛ[JVTc"xzI 38BpԯɬaWYHS!{ @\TԷda&1 Gn{FQp'e:?^\\_Yނvrp7 M8 NT`*]Ci0m{L5Xc"3[n#<9-17KNm璤|;i ov՛sޭQ EZ??JkF:WbmTO٢5~!`X3I$C"7gAHw!~ixSGPIhD7x!#uo3ܽ:3nbqa~ j됆&uB}qQpP߭ w.AT&@=Ÿ{mHqRyrw" sp`_vQRMPߍ`;P%1wTJ2<_D],s~ԡtr৏gGV6k(QӮ۟~g;1ؗ$<:ǿf" :RT dڣf7߯gx"u$u*k*Q:*nlB)_VOb0:gv&]ؘvzgSyq&H!_dw!Vۅ)Ye=l S$=3h>uDB|2?]ɈHܽ<t}6(ph!F; ӳ p۳S@'Rena]9L|GQ??a=O=|zŶ ~*noo~$Ƴ,Ӱ3L4kL:^0O BKC_`<սbNU^ƙL-lέ.Ҷ rv+O|>W`'8L0vyǭϯۼI8F8da0Nol.1"l4wDw[zQcXpQR3 )i^o^"Hg'he se&iDh-7jvcvaL 4QkggJSTl =l+Jc@=i̡OXTYЌ|:G.L23~;czꗿ?j:@b CbAaT0>)??Q>Q ,%>鞏_?z *hbish~Z_/h-!<#"rriFOppCS%+ i{ДB/E d8"9h7R8[y?' ΃0z:-[Y/f}9DHMK{}~efD /Tc/o}kӀ{dWO`#8^4Тiu9,uI$IH(e/IaN>fW "JiVHTˋSdЛ;$j? E猖K0̃B72LI\c>3LMu& yVv葉XjI[;×L<@ID~FO1oZI?x7yX)nݮj8-X#I*DxVy!ރӂ #h\ ϐ 9>->Aj;~+DkonZaLqիQCbқC\k8̀3(HTYpL)L}:QbG2PdaHc2p!lay$n6霕O;\*4pǍ1;^^Y2u;Ǥ$HVosw0 ㅻ?Nq;= KЕ!>*da#> >,4D0GwLbX͍ 'b"cHi&˵pDHJ6HI&RBꢰnLnze$N3,B .a Ihv{-՗x 3i=egX$}U )E{Sp ,}QAk 3†s~˳b kI=}\$v;FvL&cmBeuoOͬ!~x~) i#tA?mBky@9'e"6&fVF4f lf#0h0 ÎbɥcZ_0L`s ,Z> ̭շgii<ٕ/l˖+ͭr4.1Ɔ_'}`gX_)4FOa,OzɓEvX-pLjwoqa5S*3)拀<762V*fXTKHzE;x MԢV%gfW:"6ܮI0 XӨ""{T"wX|m%ZY؈i1BI,Ss hi|CR2<\+K c0xQY+& JV(T^ݩ5N;j_aZe[UObT%:h4^Y\:k^4aA(0|ͭj5+|ۜ<\";/AS;ʞ¤3ʤ38$"%B0"d\@m;Ds\g+=6~\YojAϻ PDۨ(ڵ+ZXEyI $αa5="t3O> vAKHh%We̎' F9ñF>\G#A?5` /Y̭@O 8 \/]j)&XY.Uu` P{xo!H[ݶMz|3łJo?DWXJ]榉"Gm YI_x t%ꝥdJzX="v4xvÂIq3$zh4d0̷sQkLC77 %=uۥ2S^\\e>I)aen~3_"l5 " wTQ9;r3[Bdu'!&GtEpi9 uH0K!6k;$:ϔ5˚C~6a`'?;' ^~1 QsI >Z٨rLl1ss Į1ecѬ76R͍<ܨc\2yw&?`HcI2 HG?bX0W;!,lnN:][լ/ES`&Y KiD,"hSz-@үln5kco{\uLOw5 *BHx.4'JYs_>zflÛrĵ(KM O: GZ |ߜHmAÜ κjrg emucY0}}%abfv^N*DžvrǢGJ=Y,Fˮ;8,Rjfe^d5%xvn.h`Z0,tMe=:dz6ьǣ<:mzŶ=c:6$Be LtT" 3OdX8).2I?$I`/P&i#_3H#[Xcyx}QۛӋ#0-TuS,G9̬2 [% N5$T,T$@c"XăgߠjW-w8^:{E>*"ھ"k6!Z .ބtu{: H"_̛bqS\&[LҐƆh6M5qvt g!hzsL]"_d DP]_׫ۍ4 [j&GXS_diD"kKۋY{v;&tT~)7N3~ŋq d:,pPMe ÷Cx9B9:=٫ T}% ?r\]A>r=dX:e ./{MܛԳ៾3eP}huLRhN&!MH8" pTigt&-Gha=?=U"|i}|d4ْ;fڕJq{L#D=8D+L$9|.@|K37$p>3 ,Y;vv#O}ťbH 4ifh5+{$?$1}H>帑Ɩ|F&g8#7Lnc}cmsaam޸:9!cJ=bS:9S#Hw?QP1?H">L;l[">A ʠ?Ȭ5j{3dO(W28:3X!2 \C|["QY{Ŭ_,3U Ɨ!i`F @QV-VffWy*>c0S]H)"!De_z6w"3:SJ mb/Mn ,BL1cT$}hfcLXdAy\b3b*IgoN\7oś3x?`wI s\3A)}ԡb@鿚^U?.^YD_Sk~o섢/u ŖJi{aq% MhәxlfQ 3]g[gFUn'utD%,}m&`Z63JO/ 2}*g^@0 O/`!{Egޝ߯/K%OnTkpi D 7Zj<>Zt;;#}`pEnAsUm nX#G9|qю˂Q +Ꙥ׈4 ԇp [5Sl?_/bNpX6Hʬ4z'4ExN7i͑vbRA|جeϟT<;4jKY$o,,ldI"Xzܨ$#/BW5BT矶;:l6v,o^_ͣR/2z8A (j#jl'Cx?)23K''GۑݨV[[{-$:67D[ >Ûc@d)sbYD炦&1z'L m3;98dM^:_ʏbN@EY*9)SD DQzw/ggH`_Dɵ`Hbb#x3jh%{aퟁL4i".8QY`~<?#_=GR ^j~~rO<ޤX'fVggW5 S AZn>5d4*H4Oƌü#O =ʛ|1vPjȐZ6:_BxWr/|{%E=LˋqVFGV]UKhlv ΌRP]XM{Pׅ ;%p)]!"]  })Mg7lN6֙!~ZZ8zZ V@j=O&疗WF[UQ\ )#^PZRtO)uu1t>=ķۺ_=HJ*~<5YFb| EL q*n?I( nw`[X7[GEN>M?m2Bz#Fc;@<& =l  ~EL7)a\Z┄O˛/hG 3 &T?~P@'Ǘ8z<9]JdR9O`F!AsW?E2.f8|m`LRLEBb͖=ytDg&Be~q-{74`[dvtvtc;;4Q MpXi0S&OLg)&W#r_4%_ֱ1fyg}-@x;cTExDRJf!e. qF+"Lҝ_жHa !J^~j@|cTcIj8D:Dk#'xK;xތ7T=c:vD-Ä:ńlㄺ~ ˶ p})=ix㌎so?oH ]skϮX ҷ ~-"DJ`% :X>.R(X<}r;1;Vog!yѧyP0K,)u&Ks+`(: a+XJhfҳ'̮! ݻDcxfk3?new2|d byd?7۸-i f~8?) G;HSc?r%{~cj76 ԃ{fa~U2lZrEe|+*8tw5'# H ! ,ٸ $˂ض 3iG(˵rD2׃%3) @<]RN8Uz(PgR8 a]OI$~O*H?g[&4`3oNWД]!-m0}= @!:8+0Կ?MYCo*]W`dvP:mguN|^(nmUF ]}cȜɑgOisD(=zxi9'55%˜ez:5`^΂wAIDATqsVP~#ezKLdLQ-N淶{p}ި5R.?ՆN$ IH8`׍zkaO]UCQEHeNlnE9fftThہ$I$FB,NQk953HbTUwk'{|PxQsY76ʩT?: l\<A~} RW@hAX&Vt7kq[/j3>0*>VU/>֐9HnJ[a{TG jcC3ZЬ;t DgDRjŗؑiޏf=۴Ӛ#m`o}6>1(t3a5% '~+ٟҌbT")# ~$+pRp _i@;^'C&Wxz~v`fZnmJj֌VٚP/6(ՑK`X JB@&XFV*o{c2oFMEKon}} NƕLx|1ǥBQOR{R0a ' lHr" 9@>Hxa;P+Im=- bHݾЌ[#fW\Shr r?5;d7$}P -u ge:= Wj\AR)ifq%̮Ĕ=f U(0d2nZFZ]įM$`(F3kh>=TGgflj0}sqx<9J\¾@Z%kno6~!gHBY߁m^-S4zpxR;HQ67I<2D)^]=?y}z ;<@z\'1GEHr55,c]Rw2)- u;LvQ H &=\G?` Ty gX5!Oe}LRp1!"ԃ;Vjr;o奍R {Dx']*c" 贶DkwϕBAUI]ǓF\oW`8͍od* Lf)C#L[КAQ%]<R'lv-Aҭ4 yEAҝMOyy_ |b+KeN2%ffvffjx۵Skn{tpqX0 FDTqͪ[a 3. Kk%qJ:Y"BSz֗ K%ӌjnҤk1EC bNpWGae}- ^}?T(;gP0[[;Z+gkxU@H*tY2R6KU>ުe@H|'V ;:]ݒd TW,"0*ou6Ȼo18*Hd{3GOieRP1 `ɨ ugsI"2!LuE Oʝ7<ꑁ$ݷDFD^ƄnYNקG[ߛ9~)ʀ[}}~ځV(wz.uR9) yH)^u /#sNωwhy.b[$c\͋q}sl>9r3-xDx!sq&)?bHbP6Q/VOß%#NuS5vV÷BȻc{DM;b{W ;|T<`a 6⺡ccLohF0MN{X|.J{͵խxr.Zpa0:OX}si)ʋ3sVUod ~e=v?JAwo\ruu3Wu(0!i`GPl0dV,hw@lo:GG`}=_OWLs/݄gX(x>, KMKn&f6IGZeN0^V ]eC4@)dk@PQG޼D򙭻iH&4xI_Bp Pj[aLL[sӥ3 }8mFQ./Q5~u|߯8:nE1HXibBh2cDKPܛ4'>}\bӚg닄# 'E ^7Y|HhI1;<ɘ·žoF):[ %VSQzG|RrBigdX#~# dP`3%^ut)638Ee+355KT gl 3WHd2{RԞacTb ĜDtsXS_ƓN̒kRMxS}7(jVw\nsZCb`h',jB0Ij^]Ng=>Z̶NC#~ؕ4a6=9~uag<Ĥ7ggWHIc pNN^P+e?ɰtgIWuZhs {+kJJH7P`l c(#:8QIkJ 8n6"ªhHͯfW ˹xf ,;hr vcx-.mJjM6zŶJקG? OJB+mm JZ_XN:S"]*rSP |/p>Uw"zٷD2-$9` %aG: '9=\ ()ozƖ=eW'hn"j(Ju!_timXzY]ZINLl6/2{;.0y{uN]֚ŠPX?SIdVS@mo{0=c!6.Q~;c^x%x}wzbphX!A'>i ҄&pbF"Ek] [^ {ǔB?:Bf\۩5"EMA=& + Ü o_#a GgQ=tv=Q8}>3gN2*'3;}FꔰߟU:C ͽ.r,1;m yjKbT*̛GNXRH> fÑzgjcy"_U(i%m6&=ʿ3OuoM6}6Lk&U\Csj!JWO83kXrH/-m]dQ;;o-Iv^.4,/,^0ș\"E.4)6[]5GvSĝy1V ܴwC!b H% Z$$ֱAmy2T2 fꇫs\G9fm'+[/TCX9}ZWJӛSPݠ<tHbwe ܉{ [[,vuʥ\7F<pwہ6oiفA_Nf6T K fW>CkO|Ga+]:=|j˖`#7gkyMLm˚e<4g&mU-C>E-Pwp8|E 9(D $DqIH$<;Fk5ε4OJ&HCJL9" M= c8:eٍ-Ä8i[]^CUAЈ- vn3P{BH4q?;^O2'o~4~NU4ԓ_D,& j[]4\u+b4?:@Wti&<3kMJoNPꕪm;1!JoʃKx bK,Ѱlnn%YTJ?緲e-5"D)%X`㓏Ex$ZRaD%s| 0L3ܔf:>Rd:Gn-Av:,!1L ąJӘccRʋF'}$TbIح<ñ?{ƵGJٟL_3Թ:Qx'کJ~0(y,'W,3^,ѣh7ʤI-H 1ei)a֘B"h tC6WW7WV"$2{M'zţ"}Fc&5r5?&D:QlwБ&hH&Anl;'%눦Ko/!(QLBZG}829 H^}<S+eDmhz+&itU22 pSW,üǣ:U)?,]%ÍPxc=tc`,yP/W#4OfvPaP<2ϱiailkIݹ@j:[bZjfMe udf騕i; \YσoXY&@zܪVȮB:yg^'l'k`j;.u P/k`ZdQeQ{(fZIž :3KX~O?ׅs[+9ϳ۸F(㫘$3k#Q 8a[|p]ޯoB%XdHs.XJ|Z)[dT0W'\S`Ŋ}< MaрӞ]_oI_UO9N}BI.PWU x;yVip×1ɯUk;=mlŢI\hlr&]be\03~4|L5UHРiBbh<;1D1!]>lѹu/%6v}GI BD.E|qk K%C< 977C G]G饅Faž˽W? jjt0Wrsk륕b$քg"0,DZ>M=Mq\`KK\2z.u<h}s [[[B[ZBt99ƑL/{K!TJU3w8>|wƊT7j?`zDvuz 'qԻje>tt9; UF@EFc=yY>>{pv [[֗=:=٫.j8VT>/vyFx~y9C!zAghlk@V H_Xq jr"=+ D7k% Mdv}c wΎesT`I!G/S; ߟ +<LZCVWTw~? j&K4!Oi@_O&3O&@H2tf;y@cϨh;c7qhKݹR> 4xQn?ÖS3jQLB@^z%{4Sh#! >i\VSgOu[]LWW6!BpqW5O9H"O9w+ݐ GzH^--ce_)D&\shj>^'+ ŀCz.$K]|+$"u#ԓ5A#Tc{0RF;Rɗ֯$ͮn/ ޻VD*]<=1PS#Qppg6SjnXp*$>ܛs̘]o6mOpNu3%f% \);c2Ûm;/=R=۝`/7vq,?_Gx&+6vAmoɍ A&SXӔA LM@C_]/AJ<_hkvoHq~^@%@fŭlffi~a3]P"49/@# tsu{ۖ;LM硆pmVw8;uxP%i볓F&OGhXݐ!>DZ"mKgTœ(@oZHs#u$}.ᅮ,Oy@!`?"{WFm - :&[0YL7|@ik1 pם&?m1T:;:8;X^k-qH3,Ex~cw~a=Yњ<ǐA9Y і؁wV v:#[ɍ8jQ} ึع' \F: FUOFofg/U/Z-UvtK*aאI[s°Yd< @)p8p, _'!g]_Z{$O=Y,U`HvRv5і*pMFԒ2.-p}IJ򤕇lѯ$9"4;S 9׮&Ć!L,q_.sfCj pve3 cgP˷(Q/A-;;k|pwt8ߩ5vv++s+_%b ǣ;vnWWb5v}}hxV.y+{3עRhFym5=+,-K\zӁD??Hj.fsl0qg~0j= aD;J Py7xInR@ :pQ?gg F9[gnjuf|&G]!}U b1(_ $-S$؋+0ۃ 8 .;|}xlO kC _^ɐcm$9dtq IY/nt[9OdAgo/zX󹷹M&vǽ*PI*R_(]fھLr{߈i Kl+2p%; H^n@[f9M#E"~!|=>) eA9^0AaMY1I׿B`o;muSm ؤ5!F"v.2I~ոƚD$tfe0\DjqyscsbSs&s86vs 1[y:TgCsAi@/{:B[y=~ƹG9`7PLH!2x| {eoϷ@viF .7lfdz}}wos˶wYHtT1|C J҆l\Ĭm]8^PhMglb됇ԅˁ /n|~9h,*;G;b\zO ޳AHBWdͮ$WZ$؝45J\Rñ^f$Ab\-!GGzs3Ř5ռ*[oECģViqeSDqRH$"tIbۖ\gV@n $;ߞtppR+Ph~/Mn <(NR0Y;RIϾZojE}vXXN'ҫm՘: 靃pC@mJAJ|]a0ߵPd?4b/ g~UŠ(_.xjĚ×__z~zΆakyLcz? g: nYxRg{2&ݒaiܼcKۧ!jOlA-sFb}!mlzv8 nrΨȽ9m0VyǸlѽ {Ϸ?)߼b eD,NQ}kvyye>c6 {}xkq?/7VV&¡M^`wx⩉I{)OȣFCdɣ\qM6=ALSH͈/k"Ĺ}Dɬk98,Zivc67] 3pPc`!sGJ=hX9b*IO $hCD>͹~Cbw9LbUZR2vX>%ڿ>eѥRմkn5AZק~ :|?Z.YTް7]To]""NSȓԛ4*f(* #k H$;'6\'QhOX#F?|r|Dj]EݨXD`/$`X(<$qxVV;*oêcܼۣ;;_JR*T W{{>d_UI|g<ͶMBvB_I=ܪAJ⾢ϗ!l_Y^OϮS|JҥT&ޫ{R8:eD H-7۝KSɧTY+Kk$ZxK{qޝ`w. ~ƦdճiyUڞMif=}FJ53]\UCy F7Vz$ 5WΊDj8Y $6 J G ȴ0;8$O=oLCO奵p \YX_JgMӀ A7GlNIG&@!wXz@ fsvtflaO!2\c`Ez!@`A \[14ۖ<+l^gKY O@p-lɍ"*l bqJIl;UhbKL;^7w{/(,XLDB8=eˁw!.h nv~}P>F }T = 8fW8Ool7 ID L2QEQ<,LK/:V 3—ܟ_X[[qoXf9fHz4_$!`?B& A*GDfbg2;GXG4hܻ̯HRqc* dPu xniͫЯ@liHt%1N\`K5#}rX8"}_yxr|$r>_'<ַ3t,:g$JSwI..Y]"|G!լC]/ ~ Hl2M|]3 2wSo˥'QC+]< "}c !fKG.IǍ.qv e[d76dT3HIY3ХuJ}};QwCA"8$X+DkA[&ŭ~+T<<Hs#Ꝫ(Ǚ_WclikU>g -!g׺iWJiHBYbZ 9_jWܟlX6ܗ ]xAR`ż%e0;;q\zpQez#2F./19psdY~X8#gwais$]^`$s< U<|rzw k}{;a:e/tM͵IB~$ӧ_j^ c]޽cJ m]?E=e#F,Y}cB'% I d$[jpT =#m>Hyhs|>7յ4D Jj)׺*G"aӮݲ'.{u)sFv=@ 6Nۤt9 ۸8Z r)>恄N$MV%UYb -oKhh:+m+&?FG(\" Ύڽx;E3Horʸ\GX#GE6uxIa6uRWMp.U* "kΛRޞxB*#5v]CO6i` Sxf*wȣyw-fD;WȜx;{IW+HGLMD'\ D >Թ}KX Gp+pVyP}=Z&y"7X3K~JµC4c~|q:|*T\Y۫>\\4u[gScHpLV12VlFV׳ibD`Y2uLV1xn  {?E/{O.fz6e3 eW#;Ԯ+#]avEYhue7t>6J8BK1}6h*zPyAS w-"J#~*Y,pԃNV=ķ; XpYR%#9/`JmAUyJ $)mt0 -<=sKF|c濽?#&Ay% jLWdK ò0-.2Pt/{3_fibM42mIxP\ 8.;~.b!+z/˼ eq H@vl[ݏS>-_bL K&uvP_"S;{{RN;7ߴ ~:Mx_O|9 d7~[yy5R"52F["Mʯq;&gg!ڤ.6\omgĽ^ R7 exm]ۓy9Ǫ$]trvӲ2?VuDd'^,di}>hnOcՊ29R'GZXeeli tXя¡xJMr&^Giw'$cn!B3^kmt1-Up6J!ٸ9󓑴D͍=h_E ˩_fʐ@+֠$Y&¢ mvsiu/KZQZK1**90 ZI G!u ̌i=#"9"~IWͬFث^L13[BkÓB4u! $9jjGjG'Gi _{=xbM2@KlND" )I878=wiI{epq i zO\MĐ$AlG4)ܿ~S2f1 [ϿޜFeai+5yZ:]xȚkiLQi^T<ǒud3Eyu`h7Pl70T*{uBk0YέM%3:_M8I5 nB35]}~9gAS:=$/%l~~x^*,xM4Bw 2vvW}aEhc- z$9E42yA޵CFi7l갯1B ׶?ZGm`Mv t<Ŕ]"mX E 뜉Xbl.ijS<;Pi:LϹ[c: x)ӝ}b"wtQyrnEB \dOnrS($3JqTZɘ5%Dђ>#HDK GܤS` L:9{9EPB(lLZkxRg;L'k˗ uL^BɏGb}R?ZiJIs ^2 c+ZZ4R)؍Hdz(җ6Nl/Np]> 7hL0Kw{$"/@/M"U6INN4x)]ʖݱHaQd?{)v*4Cd"L{ҧΘXi#oJh862aoNdϐ J+c.)/γWXM*SSV߷"{W5>]::"گC(m8a+-`iׂ}^K7~ )L"`Z9#G!w\\|!$}.y*ـgE޳Cu[daH=X #y$3Mh;[FԫjfvpƟtImtqgc\= \bg۞^ Ltj[}B2653dK.1ն!aos}nghqKU&($T0좊ӘeI^r] BM j3݃>s#[w%EZ[M2q.Ҽd;{kk1\ۃbcf[0<<3 i,v, O[[ڸ+2{v].nJ6o3ADo,IRifRGo4GƵ|6Ӫq?+Yz#}|y&˾cRhzd{{_VXNeKTxVng}/4P.IcIBFeI` "KsB8mӿbAE1 h$0sUE_ L2*wzY;m\ jpZؓ^zG*JD;T$r]c$R(Z_^[Ia*R Ȅ'5<:6`?@ vj8k/f [[yZiU7P 2hfO!F :d^0l#}L>£^0R_CH۷# f"Nӆ|37w'E/~Δ5$? ZD<ljwMtڷ{^*}%C6BDOH[r~Yh[naMPaHlLLE*h B6{mbM4)E!oaiE^Qs%17cYRL)ۥiT ɸޔ5l2Ndϻo7{ 9r@J±I7Į^X Zh@m~};_xJJ4S@'ğ'v׊P2IE‘R"0ڗ4}צU}1pHp}vfTL+l2'i$QڡtGW.+=aFW6GD׽b.Mikk{@4ʆѩ>u+SEgxB].mzǪ! mX[ff׶w>Vf"KQC8<ƯzF*}6. TnZ•iw'ΑZaB)6|8)Hx}}zD-9檲$!!;r< 5o/)OF&FZD& WQ%R59<㴭΁ÄΥT[Uix #q!sU'n['z,1sV6p")|vǃU3@Pz=@(-c'ubܿIx(^sX5S*zs~hsOu+z`}*2u/zo h7 wÍ6 HwƐ:N>o@ck,3ŭl:s*݆˸,s2ZvQ؀v@N|M#CӶqּuw Ǥ6gYC{CF6"@98Z;>];o9:2a"1"r}ٸ%U[s&2v ,$_ؼ *uI7y:aά.,n2pqxDJ\=h㍭rU2 hv-kmk8fD [݂̓tfx+?т˚vOy6t3!tt <W102FRRꂧ2`⏏MϹ7bߔK?e`֖3C%0:MBA@ި_| 1Ëg\1OTpȿWҗ Nl8j*\oF"ly,b~*t_jcy?H%B DzGKu*(#%o!90|!-w^ L3H eЁ%-LJҰ649`P#T 򒄡c$,c=Lsum[o]Z BgDx\rV(,)3,Sww` /ZIΰ7B3DSk%}24p݋jjDl:a{6Y(SjaAV63t`lG+W0g6Z7GfghbNF{_E {..o*tjnn *2ׯKER}4ӳ~5#4ì3jԂgG !䌸%҉c9@}.* X \NoG pC输&wXՇĤ䞁qA9c .דMwgC)iՄ-K&mϠ\Fs^O NST)cܭ ) 7 Yh6Rh&"' ~^ҵ.ltlJ޺jvlĖ־iBL*3ibnw'h>!bfFo4}ʀ"0OUb0Y5B@+F5rIUT:H@'Ȝq}QoJ2ْb"`M~:\Z+#Oc<[0߽|ҩX,FI:?c}&c1{T\=&BgEDjt&xZ]sd:'*o0!=q0S?uJt~=V҄!%kY ˪B *B2炍 i؅oeA[wffI*W[u T|wZ&.Wt?H":̡ ޶VyMS+-rbH]#v˙Drܸ֏1 [(GUP$%U*CW7e4Ĉ[SdS/O?vHJܢҺXb3[jrWǸJ܄FİYxd!W+_/{ZVڸ~rb$j35`\VŌetL6ZKKw$rU*@# ):<8o;F^N4s4\]G4Md : f΀?ݯp86%$qa]@_$EV2TтӷƤIDƉ"ՐӒ'كZV8k@RuO']Ec[qI|K>U_m]CJn=;|>' =@xR1^oaY.R(Cݱ냄$bNLF`Y!]"XO\S+* r0V` kANP]O H/RIa\`}R) N2%nȐ _w'& RN>1Dy\="< xI9L d]]O(o[D=68杳+U"䳹{PK 8]ݲ#hh6"FdMbP !D%T&z.V IdB# &|kI ,H'ɒ<|Tœ(njɳ=˨&lw:{x5.k~~yɽtN=9Au $=VaV&ZD!&X*Y ŋPmM40.]t֓7‘il;pF(,վC%bIOB4J@ux*Y);$Q!$1>|u.!J ;"ct#U49e9e$`D2~{i_ݘd#q~sOzgs뗳S#*dk[diyӓg)1}jv(5$nȥӐ*" ܺ>h5Dgabs$$aԆlSD7ʘ'P^-!FBB _8UO'q^;8. !:cxT 1G(D P S* ;0 MduF&AcJ\_":G: ~>;%AVfuUQv?ߓaS"lXzH-c8Fi(Q8F\…q@8$t9MXB3"5IC$qGJ'\}.0'dii9[ץUC \ O{ԬaǤe]61 hHE:U+4Ť*H΍Mo}F4Sp+K!cᄝm X42Ԧp_2I5Do**ZJD+;oʑ9opԻ獆HQo5a"/C0ę2-P*i*`܅!=;06rzx !e^xRuT녫}Sקb+f$.aECҦz15,=z=;t@ݾw|P[D#cp6](uDV8_=]i|T;IrNp)Q*o#\n{#tq軓\mka(_U LugHy#crGKAtVlUW2Sb h2M/xr>6a }wM6:aģTnwvq^_o Hg ǣ_Ύ2չާkݣϻO:dT== OGFʶ/>O`muӳW;/aL<3ȣW&k, ^ pvV.%R@A&bQ W;q\5||78p 4Y 0gVCPoIri<*b 7>2)2L2,p5:d m\ @:XWX3Εm[Őϲ:$H)UzX4lF7"Sԫ[G9p0l=kk}$TB ˊx\R4O6$NgRץR}ڃTF:j]; -r*Aӵr`o+Ҕqe0{]*_tͭ&tglܪ573O(==W)rt`qq&aݖir rdL[C7(7$\ILtGmMQQ53U<M_/t1K6BL|w :OO54Oka)k_oʥ9o~_N~>=a*q7oOJs #1} OT~>-/lT\x%0cց3EG&0hHM +g<C`YG&]T,5*H Q!0pI Ć6V]^Cp{$Nz@Nؽk GO咩wpߞ -l8 Kjp L_?EoU1P:@uv>!vu\Qn`?&i葋ƭ-O0 d }JfS~{z,NNV,  H RI؜hAd 8I{z ╁]W̩iwnFYCg=cxNt(9toîzٌev6lI*D"D14b_e W5Q-$aW, ՑKxDxh+M(gX$rk W&,X._HYS"ôu &3L6{BnB?$]2{F !A`ө 1ף~0)_&>=XB$KὌUPk ~T@kX){Byww[P 0q"eIh' ]Dgwl>>sǭəh–+d)w'_N\"O'n11̞ki!"ӤȈZy:a %jx<8K߶J|$lD([*9zQ\r!\婖%Bu 4 JƗQD*JԀu@х%c4^8̕D{t3- K+x'ou "R85wV吺H!6C΍]fSSեuϞ\ FA:zӏo]'5uh@v6zpXAtݛd<^PL̐L4s}V h.Y[0E%><dޭ$vH2uQʾm>F[8,""S>㬳_wtRg(H2rͭ& FۙZc wo?>& )Ճ$^([}2pMd`$+I";^ NZ="Ύ[ VQ6ތEX\]}" H. V#Nar*VQuVDj|6G:ۯZREQJ7 ƩuɅص 9tO 冠wz|t^*"G F‰چ~Hv 7HB I! ~13` Y-Wtͭ)|Iv!bF:8#%hr6Ӱ׬X?V #<mN/mmWj`L wbj">.U U,V=0MI.Q a7fD+B#] >c_H}l G9kdLb9Sm|]{t *i SjLRVUj=knȄ֡~-WbwWNWԮ83bO0)!HlN i}bb5%$$w Mm<}_RĞCS:_O1]͒d3Km ?ZŴI+ȞAs ; N$t- *+| -$r00Ƭ?l4 6)}`rHiƌ܄ƶ Bp(HiaT?Tp}.eK&:6 6pROxy{ F\/zid?w#U<6BB)H5ʤ]4unhԙ,\=ꕁ;Uj"yc{k'k[hgp0&pb{m_VBn0Q5#"5뎆A2DCvof5 HLMh9\/iWc}DVZvH\ A-l$Ɔy߰~euQoȯ67+l/|S2z?"Cb;;2SS'_3xW"H]DD i<K5ѝ;?. e /#͂PȻG#a 0m]E:c*fT[Zb;]jpg{xq]O)Vk}m=U m0lWb\:dsՎ`Pvv5!A˭S`I #j^ μ;-z #{~i+MG,UڻP 6 =5Lfcn̤/(#8ɎiݨĚlc*Fupz~.]zDrueS?u>H;Gv_GMǚ!3$./+O×NgVv{Ƣ(722n~wR!!]@KvRb/js.`GAHW2߫$]QXvY`GDS!2jz4!4NşxvWcN$*#I]U/ 4*{OͯjE ozŜ`ia+0̎iTjESOB 3¯R8B>3H&=x41-.Z6aCqъ}0,dH_(2C\"ܩzVlò#\r~ zmwa#R =[5lip֩elJͯw丄e,,dڐS{}X"6ڿT23t .\|pR_h!ذUwt7S QVFQ aȤ )}~@2Kg YO?iI{4]jC* |V}IIiNkL mL*5:is/ǑR(o}(BpEɿH"gEa9+<ŭIr"0J@yV'W1uLǿ):Q6ͣX\:]P;ēn[FCIw+#-VHf2Wc*4#Ͼ?Bw1 B$rԅ:OXӖŽ=Rqnq-5pX# }Rރky$K"p v/\aKUoFq@pdڶb:wڮ(r(_]2)LH_ .Md01p( [Xh.{H֜.jR sqƵF~sOD2.LdDfDHҊ.}z};}K$S98 Y]ڛؓ#Q6n;WiiwǛNC|?(L&%N}~T΂đYfv7ֶ'rF{h*ś]wJn6=e^eHl@O]ib!w8'Cgw7[5ojSe\-T8iѺ mI]Z3[ K&QJ$cԑ1+^7iͫ.o5ъ,R5'/mch8]ob〳z;۞2.M&9ǣqGyB3qt~Ԫ 7I"ɜL&^IsBך5D\#73ǔCB@*wq,tI..>1@%L&oB|y!é>"i ]KX.3,J9bq*H݆D3')zSWg0dC}@ҥLz(UE[<u@PITP 22n28 BS޻K(@P n(gX, O$. ںL&Q]j"07fXИYCiY/{G` B >>B$rv߰@$FݰU .^q]l`HM)-5 Fϊǰv=IBWid/&FTjqj@0FT\휱v6Q[Ml 6@HᎭm9)rEX~o?Qe(|z5ΏA: y.-?{VSm1|>}p"JxJQ|HB(6-d9$.-`cl'zm 3|ItO(|mg?q1% BR\4X"OJDE=x8 3D۟6xdw<FY_p"UDg 'FoK%Y]pM{z$Aִe9sށ@=IDAT gEDZT#ă^X޽U$={g;_̞bPt}}O2.lyD 6]W,$yA|qJD2o!Ȍ\c'HiԪpCD>cCM db֧Z؃!a&v)obZĠנ"{6+k(Hs Gl0k2Y~`L[ޱ6ۀv#~$:L4 w'bZ(R(`_»`5_[؄ vD^qgRWdy-_Q@s`dMT\E#|Kﳯ38gPiAZS_@i8E7mf3_Ԑ3WIUد$}p;e5{3G72a1|.90XK:"SleH"4C yD{$]BHEgdZ0l#j ib(XJ-\mb;Xv*4cA(,{ã{nI7$7E.2g6DJL&O-x-Q-\B b!CV덥l>[I4`jaXK)rTl~iu҇Dx+ nYtXFZE!{;w;[[;ϸV{urDeL!};kbM KN+D#k d-\>l4,W,Ro>g{;EQ&C"1GCXՄX]pA`}%379H1W5CEܺIOy"%.Z&۹T䣵?B} z~[_GG~}(>a0 :$mX)z^0:'C,_U"87 !!1d.*olr._;ZyozQ C( *F^iI {Lp `&u Ȭ~UCJdwI_ՈZIǭ챗=#/h;Z2&D]C$V;Hx% G>K'X!+ ^ԄH`*$u@pI+]l^X嬌GVX a\L J go΋t<jLT,g0[/YV$I0zA!S9 {HPY1L)'g~tpT/ircctDp|Ҹ7`nߗ}-J ȶ';xS߶kMn-31R8cjmYgZj_72'yS٤kw7om & qi8CgQ긗PP:cAϠp]kK9"@E)Op ?zdkSX^zM dKtG'ܠbKƋ0mE:Gt=_ޛ[ ٓqq6Kp3qz| q' *_$,?Xc4a--\mȌDNE5w N@\[qNsd$R׊žDzŚl3RUU'`)I4@~%ދ#P]êV$Ҿ+ZXx+s e{Cggh8ƒ JT?* (@G݊FCfԛf6Ha(.,$3Z9% l$#mgo;-a2up^􌶰mʿ7h$zV h_ibO!O7Wm=jaRJ\7ٗo%cl d 4A<@v~K,kwfmS]d(Xi3c,g?)NB+p r BK=T}Lpl3&\Z;-d,h8ܳl_O66w9kDmF#cX2"GGXWf8LCMHEY)j\ T@/M6g6VvQ RcJ%JK`ms;-fl@d]@{*2E.iٴexx~Y43۟v!ʴ]ɒaTXWP:[0B&Hhnp}X騪 +6g4,M:忴r'a2 B  bs6 ' Vڽ ;)}>4gP#Gq )߫h vΥowCb?I% u n{W[8M1mtSy{:c oKX}o,΋%_aKd!X~b?A҅Z:Ƈ,ŸL0m-rۑKeFu{F~yqygw/ D!yCT;_)0a֗(lRg28Cp(U򞵽I˕Sε¢V(b1l.68B>lhJW 1Q<VgJӰ 0 Y,U]&)N׮wpߜ7V>FL?,DH ϏC6j sV<*E'h0=FjRO%G+gP~zPtgGq'-aq l*;A,3 9VH*@-;I,L+Z9aɥ8D{cnU1ag },1S/r At`6@/Is MZè`;n !Uk͓7#Olڧg]vvhr Cb1 +i I54, $0j؞չ&/zTBhs*w]N@B6pb7M)SoGw{$R]p̮ FeI>lZ+IdWȾ݅JH0llǑ)Ru} tY =?.@6O G4 dWƝb )^Q[7ɴ{e7Y|-}Æ){ɻ2]w,y,F養-\=Sg8DaMKT+- oV)Z]i%ҽOX.0.ߕA^<}>;kJD'Ո2[sٮ!gąs28cT:gI,j%]=j0m]@kIuNT6?!UrG*P q"dO̶![Ss+gǰ)fs`S [B|P=*_X9q׆r8[&HlM5XNHT)_gv,1khҪP z{Zw6xHnX^نuk!^ueL(L4v%X )a_?JòL1|s3I.ƠIhymg%_,>b9}ghI!{4O|"S M BeA C6 oK:KWI~`0I5Tcp[>C'-!u n2p.&޻w!G񒨑?WQN˻{~-6]H>.H҉.]{٣jdxz=[˄8UĪ2dk!IZvNc([~٣l#IfIrx;!?Τ~{{mwk[=dk*lXX|wZ:X7^̸̉žFH_1%J}6?/?6 ;޷PIi _M>z$ahD WdԈ5׉;'dDLWo(}tt DûL>NaUd{;2fLƒwy{۪ oO^_9UУ j'.m<+'C:Z7yq~sLjX,̎ÀEZz0vGB37'R-Cr+Y͂fq;I)ͻ=?yܸb!O䍬fTk)ugP=IDaZsݓ}R,k<'Hp1CmxVta_9bv&~uN9BD{Ra+Skkk;HemG?w5;9x2v1=(8Un(A'wgܟa+nI+S~=?Mœb[+ꆈ]3 ~0b72\ j|K)'@ !$_ɸk5 ‚){%Ά^U+OovAmlkڵ$3jz/AtTS5 f7>L@2ߚrDDb₿ƛ"ZSmZmuMZ'rSvN c]q'xrO8wgGF `@LO gl mnd<[^xcO(Q, )rɫ$CHy{F<릝wu% 2υPK=)$žpG7IĦ*42t&e9r|Z~S.a*,c /$=Jӻ{`(fyƺү;yvvAHn-(nE֚,䄽kFH)nc-Zsd\:BJ2͠+Dd ϋŷw ;d^|ˑY |d>ov PZP8o?]'D:f UX%ILMO:n3 C0a͵% Bdp2P\c3/8l MV.ݕ,%qF::|[h3  ŎkҺXbȀK:uvHb%E^[܋x_˒_v5y8g(`KStő nxԴ °{j!C['I~& IS "YH[`Mݷ'%؉y"8;-.OQ̟\,)3ɔjj?_pG#_>n;EoYާ!xre۪OoZb X{8@A6dobJtȷm&MDڮձ5nmQcB,ї]CsCR;)&ç1zk 2S^v!d")6J 2mE"Ns|TۮNc}M7 T"tSB"p*y^EZ$$"R̯ntW_@D'<_F-;GxL3 )-K1EkgTڙ2W g&F]ފ|Xf72O0M` S-k[$UQ;(ijagѻQL<(񋪾c L-< $de7]P?[nHB-Hֱ;l9Ϻ z&M|vH(+."'o75?R5_O wJe>$=&-}]DYcp5t.EmUD Fh;`{ne*:mlU+kEMޱ6cvl_vw5|E`b6XT!$ JE=fWta;OWK}ɸ{ɘhbM fWʙlaOc=VƈPYY^/~ yi|9d%V0d2`38rt7bUbaϽ@. xQ.wvu +"Rv;/"-]xg @rC=$/sP2FdWXD;dff$fk4E}ѣК~񱲹@S`(ɨF`!e@ʝT9t5λ.DXN{iJ~ڦ}KL՝(S7JDf"79sFs-Z>I'1w<^fcc(;/;\? ~oI'X `JHcߥ' vJװ%d`!K OSEV44mKq!81IBROyN)ыW,}8<"$. !6VGqo? WǏ>+èu?M;\^D"=NޝoiU@(8Ҭ&D(m=oSH!;8\+Llp 7Kǎ8ҙ5ZXx9= #F=?~ Cy%A{;wg ׫^u`zھTLwV@n8Vv9R o7 YUU?f%&TI2"& FۢufA:jKI9/ײ &='ݍ`[NGι^ewikm-_s{3t rmw E>>q)8 zAG2x Nv0#qPĚպrt"HDZ5|>L6n?M`I@˥R"y%V<|^B\q.5yp41_v8|M)uTg'HP;d*UwKhUW8kq2(0v¡H4MX T, >ݵ:uN|-,!6uהIF' HBrmA[wj[椌G_م0m=d3D)2F i(qAYYo{[D Us͠l}DT&rb׺b0Eb/‹BČx Vu3SeLu'_S MԱ^;WVDFR*X? vH nI 8.L =ݪ%CC6?7dzyy ~2\n9ZwǃW w.ޮ10F^^U\'56ԍ,u+g} e?ǭd;prڮJFgyjU|69L.T+OmӥN&uФ.-LJƜaKWTWߤ@f14<5[RXuL2PX:Dv iC0- «V50昙O_#k =lS'=1_NK[.qpkJ+M5#ľޝ bMX};H';YDW8/N+lҢczKuL"yq*n׎*bM@pv/&kGޔJ ?vHXȁd`cȖڶwX#i035-l7}Bp58nNtj@RnBV8 e?Z I8{as=/b@ >~!$hߟ}CTjgc#5ZYk+oII%TcwouW s%M[ bsc#Z [|A_Nr8+zsJ/ges?hBE`n7R-sJj{1oj雸Z8QzG7:5=obj X հ߳* iOt=HƬ-.EFp Z:e/)IcAodH<5TDgP3?4R~|a~xpxrɦ L>~RI) [l e~aÞ?*$xRb1<8lY?\Ķ3pp4B1>x(8{eX";pPjq-"8Hro,/nBHHaooN=ȩm؉4 Ls׌njʥE  6& cx*Iǻe (< &IҒ0D)V#!'!ǥL s!A7Z][ :ˊ^^ݏGxX;GPlrvql* 's,:?$qXeUO/ճztM{#s{K giL4կcj5{]"3s_ Vh ΟElxIԚ& .y~k˳O=UO'iGh^z5j'!hxI{N.+h3seȆ Vk*< iFoCF"ep#2$s@C wƹtIg\* ! I*,%c raGOT;}BIWfx0xi k/*JZn: 2%}J[1Y૖2WȌGҖD$2[0^X8EZ(OrE jbd {Ak WǕCۓ ؖ**`]`SHM\{@bI\# @o޽$bօ\:קhJcZ2ڈ31 عf=X8U2''&mm udE+=Ssk. K8'B7.(Zu2X _2N ۛFc 66:X}R6h?-.אַ&\ۓz;ϠAD[i¿6=iLvahjCc={[cr[gvw}&{o Uwr-t%B>Λ2+[6 վa@/5Yl6#}HC?qϽ\,P~~"))SP6[Ӓ_s ٱ降ͭU0ĞLSFd2h 9NmON uK:p$A $MQJ~-/DϣǓkbH $xaIH 3ɔjk?sda: E|Difq/n$'| 8ȳNH.>+U"4E* uH|fvOf`#iqaH 7ȈZA!ۮ"jbFmZ 9|̴qǍ5Fi&^u$ 1nnˇ;RX&` P33Hs%0A Lbڀ)& 1hhXJ~ ('e$@H}c?Xj(."4u Y dļ{}oׇpkYnl>?o<$L,f2λ!A juc)TTG{qʴyyq3hn^w1`U ӫyb\oܺO'H&vtZ^1'tŷm^Tc >[y4w-zv̭-_Ng@s>CV}zT7g{M @XGo._!oO8'}g^͆c76WB8NW-dED63OuPS" vw<=7cX< I2ZGc8]8ކ,LnOz=kr1 Ltq\Kdnj.Ыt.C҉Y>BvKYFȺf\C $ ̋oeBxR:$=@#UȀ̡fz~ʢTp┥'ֻ.iInl.q-MYE2Ј)uyy6jD|Pb_`#"{NSjȰ 3ڗh A+mȎ1d.8Hvz H]D߫TmP'N&4< ?zFK7u ͭ|c: nRm$Hx]SC> ;4w4u07^d+v@R"OzU˛Ϩ/@OOneŃR)~-3|>}BA; %݅P>Ak[4nYa ڨXOC@63Rv)<]# K!SEFШ.зۅŻ#b!/u@Y"KdF,ō5o5˞"<ߗ]7~1JYˉX>0G#$v02!BvC嵽X Mg5}=8ő{%v:R,BH=h*\%H#B$@YkkaO̺~{}rSXÎ%E~rQ*ÏIߝD_~`P8*؍9^O0\c{нy@9_wY9-s7!!HA!PIH+o v6Tsg MKf4-<lHAnTGņz@zܪ [?2Hb_Rկ)پ8Z_3G&l8Ku!Mcp7OxmCulv%{9J ك5SGv72Fo2凙lxߔޮ&.Y3cD2juk!8X{L~ȳ #~xm jD! 03=FSp4~DT $*_|-чFZ6Rjd(0 ](!!Eӏ8 £@T&.qKH!arS*t()3t*(qW/O>w?i|&C+Q8#?uH61۸S N3MhsC U!ofwvC24 Ppwo/~-nK_O"$ Mo!JgTbHtNdmkRG^t [N*kF!7|H7Pf7kBy4pX-oD~Ȭ+bUy0B^o,%C!Ɩ (&vPf0K,Otl&" 夣WȚPHRS>ާMOZ]a0;+j5^hiӯ4&br<}TC" n i@ put D8)`@)Z$ 4LsN/l$F x`"MthG&$+VOBɨ)'uK cR热X+55=c39`$C8 xLZd-+Dʤ41Njkc?QIv-|FLpuhW6;2ip;-x_K*ەk``! {}X00Q!SpT68$" S:WU_?yHws0IQ& u'~hAK?kiHBlM; "3> @cDvvh|qy'8}FSr݃6&{35ID$s ;{]/'[o˸}bXj3h62H6`2>a5~ţ\&vNh /8Z{\wFZ 0,VPVK ɞ! :.'wFxrHZz[8Sm\M#c? |^:`KeOPX_;4m#x>cn-`SRۿ`R2`9c4Q.AN".3AŸ>׹o$ I96heju\B!5ջhD{1jvhGlJ5oO `ϵ3d7tyF7X<3Xrw7 PXtZSv+rz^.CF]]!C:U0uc-\M;oZt+_;dwD ?IƼ"Q϶).fx5'{Gmw1U2ePF}PsLXI $;h9濞s&yao>H z$:&@;dvg=sFHJ^/\dz/^ ?v ~9LCReD9U7CDUJ^9ONu}(xAd"0rXZi?A $q\E361~sG;V+Ə(ۡPM)SD(>t #\* !򾷾3P ']sZ!<ʩZ 8C6ǔÍ@ IhaFq^QŗI8]⤋w 8?H")d1K>udp||JKN7vO(2dn x93~P(3PEs®-:Lw M1XyC* L NZ;%*s)b`gx^rACƢ١1T:iy)M)~9-au1R!L{-m]i$qo >msg`jں EH[ `*``E@Hmx8t?p8"dͬp26knx+R,8Xm-BlrZ3G"cS1#$xV 9xގ.x WxqZ,rV6O4B1%BcfNsC@#64Ce&Io]F>ԏa&x{ ,p>'HͭJi"dz}-ڃIZ1#DV\>_XwM/m qTZ ;[yEW62'8;B=kX쑅 qPI' ľ~\C1O49v}ը$"_,i8*&)1|&se$7zR̡oϺd/Cɰ"%j Ow Su/rZ*f܏t T{;Ӊy 7b*nqeWX {e t P٩x+P9>`vL25N*_ѤrU302,sZ]U3fB0Oh bH 3Kb^o2)bLBG’YpIk]4Iv4$ 49:17Iw76i`r9CYRhϬȗ2Rׅ +;}CSiW,#&D {tZDp!,[EHUC6*%怄b.{Öf#$s;_ QVhƎDI0e"&+q 6P0qm{`g;Mev;8hL? wjIRl|_}{9{ d#y{/r2ݽO?֒a*j9* D*se3m!s24 yWBz& p?E_ I`$,CD(ͯ;p׎A!b&qDv>eNϮIލZ$^rY+bϚ GqOxooύYFˊ)Uķ3M#TYvw|rEgr588sJ_?-W;7-} 60=8jY'DpXnc2) hRd:usҧΥRq\08œېGRl{Wm`a֤"2KtSWۮ?j<ɲy8N,@n|k ‘! Q4"e)}GN/pyʇdq]UmA .t0|'xFǼFD^xFVNWC>"k@J&+ =G6X ڒT˟@Ro]p@&9!TӋ@M$j{%;nm>ch`3g?.\aw!H[GóRKs&f+)|edx#a3dH^gk ͗G-rZ퐪ͨ&$ƽQ/ ЙG$ѥW|Ӡ)o֌hXٱ1So7Fc^rFc>U05X[[%V>?},ihh_ .H'hfvi߯~}}/ΰK(l>AHc"RHc{L~6M&śje~BSGӁ]}n&>~ F~&KPn7Δ "WLygxqߵ+ť \73` gO0ZR!0zƞt` 3^[Cx VP6@"dkK'L^:85ܣFCo~I`gc,vgLCdz_*Icb[%@ 2 vRO̅%7d|7NWaJ` Chw!˂$3\& M/"V6L5A u 5?F*BB>4ӣg F,0W Qm!  @y.5uH?ZILcrbi+|k, xR ^Ǫ|r,!q,Ch!$ᤧމXZE6!EM:43Lx٦xз &cApxzX}/Wc8]lŅO}!:bSTbO "YN5iSX!513ٽl~}m6/4 }v'<|ϗA`$?ήn ',t"م(#*e‘A % UpNf ?V#HzIă|T c#OzHXǭ!L-%I"nlkx P O7.bP*m-v)R^`^$ڵ wf!40dq$sS֠me 24yVzOy.ҽ8ы4.JѕnL$75 X j>f hgNb+r?!tcL!jYg=Rޏ3 ִ!c"bEddfP3@6=8:劁|ٻS$ څ&DY7&zrB!ndI6y[&~eW&rff"x''HVX"Hd]zqՃ\Qֿn`r Yz,|:I5qok%{3SyL2K N'=CO4qp1yA^`(TH~l~{h̽0lB\M$ @5):n)4B1:BxvćIeķFS {f,]ޙ=4 R $M_V lME2:he|&?hN tŤ/FJ7|"m7`lrg;Qi^%g`hG2p`.EG[C<!‚"WW2l5w!Uke$t4&uI0Qo:O_p&zd.C'`j kiaK/ĔZ:{ rXm^_Is!Y0Z<_}ߩ'6 &8gAsdl\8$tG!)"f0# }:Ė&_IΪR}.r,&ЋM4[R;.'7: jaB7,wgjp҃EV\6ѣ Ns&$GaCjIz83&PYG:ēlӭ=] $D "`aX]J&*]mUW$~-R[ XB]CR])@/ (kXlt.w | 7@3WOΪ&Y( HP Lo/%㳜+&kŐOFJ;$M1dhPYjNJ(grhA\*r~&owK TCB54&Evq8jo7$GƮ.LH"?4ifu=qVK҈94阦!lw] 8B|,HG7`di~a Rc }m}DbԽo.jݱUu(@ari/(F"{rؿ%ɐ7\o!,R&BT $2q[xwIlH@c(h%o;OГ|:}ǿρw #+eHwQVElغ{u}z*9M7PΊ'&+<(ĐU1AZtKN U8lixOpZ_$Q1$K48ӓ %8Ia@Q`tag{;Ťpc1R!Bh7S{kS,WV!}wZXZf>?%"鄻ClgX ~аf`b!qQBTnS:EYJ[0kk0_pFE̔;C6 0MXwznE>^bf$SAfLd UT>ibۻk*x Kp)w[٪)I?B MrnZvk~F o@ jEl{ͭ Օur&z`BK`BO 2BN a^]qˑ Kyw' kO #|*ϯ,,3i|kNoHA5zBKt.D\1bT ]ljC39\;<-êӌ&d8@8IAl_ߠo|dtBFgHZ;{6E'#q$}HC r^@Gn)pGuD $[T*H@WKIL2Ge5_?,M.i,Ma+n=vB_$"IB)"ʅKp8 Z4f^<-*jc$?y [=Jw4n =SY L/ɯwgoO'a>G`?z3!6-umb{=3!Cv+mͼ=C|Enpv.5LzFmѥݽވmf2#ȌyK{dvkviivg̩՘m,900hͤUÞg=#2S?*$-264 3$v?H]ߴ!SC ]=&o#хT,*GXhtV"OwѸQxxE 7ɐb($X(J< Q~؁^2܋nM:E{J/Md]hNzٯv2wTJ4Hty*&_0jb+ۻ7'FU*,Gګ"L/4u)e(a}])ߊn&6hZod Бކ( E,27u6DL:iY l %*HfQa`%śDv \dd GAX=9"L8.cI"`ZOyhRwW) ?!a~C ((/A?c%n,aKuL*}QA5@R,JB2rǣp$#D|&)U԰{ "T?>vp:/I3N1Iu4AN؀qXzNRkJh7@v˗ծyF׾`~k@6njٙ.D ЧFjjc$? ~{; jbZ58Җr`+5K%e:%f,O11XfecQpT<; RO;B&X`^w0_ 6s;E4vڿߜPy2ӱ4e2y*,5A_hw}>|]b^6{t;;{{Evhs~O H+)xGP b&&Pː`xBN8 Zk!R(@0WIwwU.V FኑdI,upӨ|Sm I4/# 8{ݢ5Q+9*dv?B869o^1rH>\$ʝa^ ibYSHaZ"}C"i<˨è j&T`ym#H=hm ɜQyMk:wxv#),.oT kؖ/*ȋnp6Y[$=ȓKtRxƮ]HPmn^!T'MwI[_hvsxz7iS6b.uOF& f&f ϮzqL2 '-,Q4's}KŃ7ҿ/No.N?OK'd=~}Ns+?v-#VA#Hzv}%QnXN&f$]b_sQ.#O۷;?[% T;;Dⴁy*wS`!1BC.zʕ!jz*_I!@Ep41]$ pa_IVvR$dw՟ϪoO+oN˿Vs篃$R͕$AelP s#wY vN!NEl܆ O#LD F>ҥB*+V^ v#q8UG[IAp͔;B6or'/Ww#ooΰor7ѡɩ)߬/8%֌h#$@=tCI amWT~g!bgLLţ }iir|tQ.^NfFI BksďI""/ 5SgFO? $^G' >S/$_yq "EHr6@Sn| !b|8 Ҍ}?S2^RZ]b3ǃȽ$Ds2'̔Z'{7e'->K{2.mjFw "3+Od/!Ӭ(%ww/*R"Z*x|BP`$q?>&]}3$6h$x% _>4zB5 pw|E6peͭx>GG,Gn4#|;ِJ!oԪF"h:/`A$ݘ Y66v3eX[z۫6 aNjwgIPֱ^KO]ʟȽ R%2n 7[o wym%An@OA}鳋IJҭ!_!!A~xxf jڮ^pgjܡuH^Vܩ=juMG_pFmbS[p5ǒz.쐠Le+SI!,T׭~}jNXNBLvlҍEbyYǘ ׁ`Fn7VW/%7§ Xq ^\kQ"fJer+!f;Is# z#z"TM4ѩ쳍g E M5vS;wZ:Nfz/0h⎵G;DFͺ2X^Cj9q=G@ҵ9 .刻o;œϳޙUI"GCM HCHtnd^$7@3;ܸм'HD_$fkBZβ ´G/ |.4 :KG+)pt"׮[ Np?jvK/|Z!+^gzbο\m./F #&%`wG^H_/ c0>X1y3ؚ@` YKkh\y# Cx0s> 9 ŕC@MÕ)+#+Ĝ뛽B;;ٺw5ɀ\.Ln`-K&~8YţT, fp .tbuFy DtEuv~C9glwI]HIMasusTpfCLJBe$ҖMg1J`$<#;W#?ˆpR:{@N҇A$f' _cH] RJe㻉a6y`k`b  XL lTOrC7'Fxx PF*ꂓT'nxS#HzI_$5VAA%XD6}jrԽ*}t"Y<<('P:8@o8E!hOcX>J_[$5RO^\|ޭKk]\@"F~ózU]+fJ4d?_lM-?PCHX xkMWCd!l2dv#{6ZIelR ql`A=Y^ZkbKW!AnZ71u#@h frDfzn-dvŒ;i}vDstˑLeoTpUSL]b{ͯc/zFL*z8{ YElAb3XvAI~Ŏ+( I|!X P~67MkFSɝ@,RT&,-mxOW"{F$Jx |&]^ݱz>Ðښ,u_چ$_xI\U409Dy'8cgt{i''@ s/}rommµxHZEN;;$^߈c[(px%ѹ:%6ڋ[5$!F^}C~w]Q8:%v4£j"@{+6rAC;!b8;:$5Ӎ$S5V-eSGwWbHD\A! : 6)[';zzRnthZ*"Wg뫮di%{Vފ>lz9s.TB4w#dKOS!K_k@4IDATK7=9ITYLv#KqwcTţ|*Yv G^ ߩFqʇlzS)A֑\յr Kgx:K!-rMd/P pF>R;X@|^*'tzBc1&Eq !g8MҤjx37xϛҲIIl2Y::$ꠕqA~/:"5L!īFմ. .”ZI=POAu`Gt }Zw֞G0ܤ7r~b D Emt5w$24dc"3׋q7鐤;GĺBE xlVg->J]6jKnN$0  ;c~;ג.[c/ӡL#qѐ68v=$Q*Kl2uo}#f a!S[SS Γb_"xpPj|XgӺG͛D*rCg'G+a̱-?Fn''ZM= (7`"Lyգژ*Au3VZH .TO*=k9kY$A,dbm"Pfo/Yo:^ߌmm$ox~J+q`kTw n. 껑Y<n/o\ʬ]JՃ$yAGrql~7 vTibkb(  I44IJ31%1d6Yfp3*bws.ŀ~i&U GBm׾!%D||tN6w]`h!݉/r`H'#oۤߵ+~R?إC]7vSG~>jxb4iX1Pu#[s%.AllF9 $Hp~Xl-lyFB4&)+o3o?Ka-2$ G,FC$WwG8(# ]UGzrD^g% bQ(UO?8To?-V/}ndoosu+G.w~ ~8.tOZHŷ \T,s|T3>U`.W id.=="cI[AR=fNBCV$е߂K AGփO5H0j$ҿhNewօnc0:pI!A\~S)?Rr4Wm,//oڧGfjNtp ]>[W7ڭ6]MfyЮPD9VSd]z>ˠ =ѻΕ$*Kb !":*sK1gp =)'k/nKU\@þx~6{iIeqp>o,ŏ^َ*F3v{XLQsԴQȨ߯ztiS|,xպgR&A20SM&!}TzFDp Q)J,)^D1&TܬVneL=X++dI~%ZcV 6TI ﺈua+[ow?R~_6Ô#=A\="ױICtzV$rMc w!6`vzfE#߶J #t"zm69'귯+ͭNuOڗ6ƚy~^qGm&PS!Wt`]^@N+?$YqWLv&bDlI ~ 42PLf8joPwr7]vߔ.&2k뱚Q"} ޷o} Ϯ ј ^BV# ٙ)SgJa9RD<œO5jЩje)r9 ԘPkbt,F7G{pԐ5y;\aŽ\n}y9uC.t" gEe9@xa/֗0d>\Yu{qn >u@|Ϙ0JhуJ3Y)'~'I@ j&B Mb۰l[2eUq^: G-BDb7qQ.sxw +7C8u1u.8~+%ɐ:2: [z zFwʙ8sk ZG#D`m>$a0uy5_ó6߲l$dҹT2SZ3[nsaTMz+Wm u|iOGa˥*i{Mw77ߜV*G0No*@xKn4;#M=ntVߞV _ڇ4);J1Qĝ,B^]~0Och%|)-R[ -yLMt?Z'A<%DRRg؄kmi c Gr%r!M0, Q.B6u,O4Qo+x99zIIrdIalҡZMڣl.o o;T?v*h|/8uX =Ȼ=Bjbtk^O7 MT+!&1Wmp%KpzG8;erՎSWp3=]z:/)+??Ɣc)ՈYE- wmRP?;>x/q7J]I.\N~.5Bi{'iw7JSghҶBF_Lɥ3@}z[[;A~UqOKssc\n{}>r -=-OfBۍOp$:` .quS{#HzI2D,\,_2w:'8^00}B=>&,|&'Ȋ\o%T^:n)x"Ly6b7x{z8C|ѭ4;։d2aʬ]}PHkCa4!}"$}NH"יW& MbS G*lO 'hX_>Cε mB*\Fͼa/Z[)&QӭkxBx"FO hav֣225;g:œ6dG;߯D͠)Λ1aĐ2;1O JHWXUrg9Ņٰ9ŭiq PG{v77<qsu ep RKKS* jG"\8L2cq_tmI:°tYR!rbN=9ц︻=Gg$EܺP%) %8lZqx|7^.&2s3NO}MBgI_ Kb5FtQ1] `TN=ch5li]3-~Sd+]ɔcQ0Y~#H|N)& crc!{G`BelT?6UI$J]T`//Jj>+Iduzf;]:izW-UIW,d"gKbXڅͼt+yv7͒4E`VjR()c[vrydmrnxa߱ ZrJ[b2}\&Hc̴<7ڂx+aq,$P9M *ږwwOhWQZByK ^goՐCs@kdNX*;(*7_/7Y2@-v<@T&Ho=/,`A 5+``R>8g}qk֠ dh|]))m stQĐ'yY 7Sj d<жAr2@n]#Q &?gr"6S fߞEI2(&%Z[<⩜FeEx+o%{)CgG٧:AZqM[:+rqz˔~9?3 kiuxzr|_ȥDk1%R\"QHyTaJ$^WcнHE\uEu B\$G5&O4mIg`& o((KXIzIvׇgi}Vʯ nk=xFvy:ۯov}zw3?{.! }G"UPW :DtYHwR~+OalUҧs.-oʇ]}v$ !_D?>ߖRKvHhѤ/(=E|xxrK Ilk4zhܵ2OG ܑi]\67>d`zv5Y* VKvMMWw׋So.55}&y-q5ZoYF'\6?D] UZӤ=4P鍜^]'[^>'w9(荸NN٥Y$ |w(!WR ,%14`ĶOV׶;yD2z2vH Jf>ˢ$=?Hcge(Fjd$G8iϦ@RkrN!MKm(#|:}F JG:Vs]dŽFFw+ "q.*42蜗!MN-g7ņ jOxA?OIbt'arY`l GΊ'4Ӹ屵- k׻5 ?<OǬēϙCO/N->dz{#ƐL*zҭڅ/8#‰:6+̯2 qy4ԭSM꿛j.UZmW}ۮG-ou~P)9|F}K t,vpCã|n}mX @1Z]%grV.e2Y\Fj MSYb/75Mis37rxn{)h,~A_$uIL;p5~jQ,2rK`zεfB?Q8[F$o i"KkuF4I>lot"BMvVS)W0䊴 'm)\@BHGn!`0F.@cc8 CRF,,Z;cortyJtxAJd> 7A!|u⻛嫎]q߬~1Oն笡 !/ίd?\>vb49CHmQʶZ&eؕ-g s`g?)6vḬtKmtߊtV)|K1iv9d,agg}dp|  ܋J,4ޏ _$SԸH';D^AP>A$o)]fk 2Ck9{!sԅːA $!?*!%tIl6HK;"vK{duC[\\b+WoڔKx/f;n$[Sv]I.IW؁`n=4[D$q+@01 񤻔AҽBR} ^. gߞ?jqǼ0g!}d'+J-|=ƜJkWJV.9shSv|*oh{^*>V>^]\'cD!#յAcW`HmBcgɁ]Tb "ͳ~[W?KP#s !Atvv:,)$ m/%(j{u[t;]30ml'Zջd^ZbQps ml2D?4ͼ^4XS9x7\T̐Ia :$}W5@R#Hz'nmDT ǥ. r; h&3LN3i3v:[.w)>c\ڦۄ$Qȭd7 ǺvH x]d[C!4$Q"|r>dTByVd&g<2j7j>]5.}@8BS;x+Ɖ-)~jP @;6U~סzs_>‹D32 fKI8ͤ!O?p}rWS{A’U54#Pm+\QDg oOBtzqgs縐]^XHli4\d!2֢Ik'T*9vt0_ Beν|׍қjZ7!I`A,>ks@)6) nx?"\tu:_p~$~\q/8V/4cM[jߐGjl@CptokTkD*ID>}*IF?&t*0"a5] Ѕj{1@}twmm+ N-nsy{ͭ?QMu;(auCJ΀M!s1,P}Ije$_X!Gg9z'KZ<[v&kuBe`U.$)L6 D]!lOUYv~5/F+ 3]Ǔg)5U9>@a6b 3ˆ٫ %IwQ.&8ReX?6ȣ )4R?6lNKҡ>~{cK"QDrh_'WOΥcL/L^Sb{yrtP $vwb:AsĄg7 ߝU$@t"M}3Ȩ% R_ A~S:.uK"M-u9!]!PL\Ճ-ȩA*;j'Ek2} n8i=FoN=?$ETYuQFt?NRC!Mtv/!NTElQz8鿚6Wc[[)\ N*H1ȊcPÑq ~u9V.7]2÷g 0KxB[ɽ\xY-ǭE|tVX@J68j/zzulX!XI'I wr-eKJ K>`5ƅ**x Qn󄧂|Oqड1Eq㙅 f.U`'K8PBiç xq?Mb;Qӡ强 Lu\eҥ4ZcBK)C>)1 'i}&QNv6w \TK rea!Di>N$<6ͥs;[1Tf޷͢Pd@"U|n1㻛[d:BLpK rUu0kreXTǯeb?<5@Nwy.~H|ߩyxQ (=H$ӧ< V..Aī؆gs#sb|CfB}H_EHa\H5 T#w'>$ f w Ы-OM-Qxv2{LIBltaAm`;"@xT ျ' Mo] xnHM)E٤6HnGj:SY d#APP2i]}H ta,ipINQug֓L>+Y ~!suCڄJ.N W  h3J/J({xF[=U/nԒ& |:" Υ~qˌ I#p=l1Su6’S:9؟tLCyN͡ jO&utI,LT`7)\_/F-Cg$)?"u.X8BE'G)OuM,O]:nlfy/|8K$ d!F3mo V9`ݦP2͸ӻT"}^*JNĒ3@U6٣B5r8q>n!s@y;r9F#1j"gHs ɢ ͒*)5!DXD|S= vWx/GQG>( +'f{<N۹J HfmWsPawL:+tzr9ЇAR 'K1o o[A$53spnH3M-F6WVc{=ypLduƙ^ du2gG&T;IDBR vgMl~NWuI 3wn/4Y.H|RK C IC$>8PI"p:s>Tb <3BDKkn\7jC%:x,Cpa4aaRK5Gx56jJOdR[ML9+v6zC?g6*_hPGg|.Kgg;̛5̔NJ05럌D͇dhт35Ń!*Ѡs ' A%ZB ɍLݲ`TV&F2tRaô$HpwY2sD9eET wg]OMdx qPhpv\/LLGF hJ- /V22=Q{b4@Xj TF SƏ, .H'N8OʬAaS댰I &B\||\5-=2\ H0)l2KÐڞJV jKיux[Hrdrw/a\n ={@Ubb9a/-^L؆^դLcjg"otAuvQ.TΊ5u%u|!sy[̒}'n/ rk6o`^QN`"IM a46 L!\\1B! gŔ!L A0ޜk'/5bImB#/[D. fxRW"m1g{+K璉~.T[^Ӥ=iۅZ&R $g(kiVuac@?|0gI$}|Z:xRRK!46d,F._Me}uhV$tRP؈T!cX4 !W69zt3~\x_mq 3n|]{,%=aZ9ETIz!"ur{ٜneku!m'.ϠUi RGKS~~_S>::;-[K4MCX!֠rć$F2Ta°+_:|mN׋۪5YI u sЇpBW T>epoprl uNZIˈTۯ]=J7{.sF|}qH@8tQ*.QV"*Ap'ULw~8;kpYY蜆Cü"<__`7Ζ[vwo;.XG`:Q=B7 n+FO Je!pĖ8JG֣3.3gsB&U_2O-CtzYΟ $QJ*9X5+mԴw sKfE!TnjjFT"-t%޾P6Mkrd|׮ ;roA~'2t%q8˘22{])y =#tQ[pXp[6KET`g;N*\}֗V>!\o۳jlkWr#OQh79<I>&JN@*/{Rԧ$S׀;;p}Gi(܎!{chN '_9zcds3~PQOȝ]} k%%ߙ VX]b6TF.9Iq5Ʃ;0^=\[\G,X) I44Ն:{pЛ?ā2v9Om%%цc!Ohe:)!#HHMJЫwߝfpZ*m#x}6xV%wg/,mRch 9>y].+XTW;5gz\m+&7j~lZVCbwgvHBrsrpxR@\^WD[QOdfLUG2*IYHL1%6F"L avzjkVtH L"q0΁3u51GGeU.2#o^sW?3'ݎ ,0\nx&UOxz>AH =[MPKU} R)t '8=oJ.` ߵ)LBRj7%UPxHSj{ ;Z]!:)1(Lj&[_-68 .{D{$3U#fXG9kd dn*5⤇$QʕH8!,ݚյŻkԔ`SRL0{$@ʹwt f3Bmil /*OK1AG*IuTg&P=S_5 yPŇidP9O:zZ\C6F#3+:$ "zZjx rߑpMGN (_5jS}߲/>nMVK\"~Q}TIٮǕc~t$j:Eൔ(I( =X3eb<*ai$?4R/{ö|)1}űaZ>PT B~iASI}zt"s-*xmRկ~wV=/P+-lb*Ry% aRSD8I[қga>4q}V+ ]!6!K_`~C NO5 Wt''q/ߙ|F!gfW1t-Qrgm1&WwQO']TӃ[gk`[G냞m7QǭkmT߭#xށŕݥXhvSg6h?gH*'Ip¯@ !ihIlI80a-@[ 7p }3'.2=gZz LComa7zlm=?(A 0xpЄjIo3IǢ AYA@ %= 9 OFZjQ=g8N10\\X{B[bQy*'w%G#s;;KtaU A&,u.PzBBÍjhLIMQb<C3n_͊fԩXI?h%4R-,w\FD}f+kحNg qpvߋ&vPw hx{$Dhp ^dW"?U>?==>2[==LC'`Ap] hlO4s3ĬC==ͥ],(zBJ gfZb# $Ck"tt"B'(' ェe$t_[>+]K&2C>'O!(CPITxnz0;+9݋}wqc܎_$!zocYhBz_m$'Q"@Uw$Q%$! QŸx3{vij|sux?o.^W+%Lh aؘxrVDPXz/C 7^.ߧ>g "ƷU#*k&`65'ǍjB.E:iWVGno]F$($ `L j ssD5P06*{>on%R5ID& xsU0[ң(Ǭv_|{u䗋KAEđ}rp  _>a" Y% d֔0= 3W"zRPHy7E&GhMlii )'ą}'d I>RmHgw7 ͳqjo 8Dji[CjK(ޱ_H{@%)Hnn3ٟOdVvQD?\sO@"O3wd[]&8MRr}SI7@%N:z!/|uﲐH:+~/s3mI2u0GLm'?X?ZmRLu;xC koUPϋ۸+kn!4yxrmvμ`4qG_ 3Fe}gXE&QH)"d0VXH$P]E$}TܸA' % oml.G B="FʇGlAd6xJM?a c ;Ԁ.8xK,tO]672DT^TnW2gVغu-vKb;4)R䠧(@k*ލD-fbbZ(,_#נ^1)Q.Ml  aF62ܦ=98HƳȲy&P w$Tۻ^s@I {J/ұXM/JEH0 VAM7khKcו'`wd_7dt !/[=&4B]z'e\W@P;lLD;>;-~LOfR*66<0#JSNڂsTEkLAqJ'#ٿDڅݓRSP$DӱQs+K>nB`*ӗ'o<H U GZb#=Vإnb{WNO7J(@>EJdeC&G1OY;\m큭nʵIeJ\:7h ',\B4Hp} <I4U(N#x`6!$+S1L'({=e蹲ɍYw>:{Zvb'Mp4֜k%H ߱x}}א6nM8`c_qwBˁvaQȤN_zNǷ.*UlAoK !Q*x̧RSMY) ʏE;AJm.u P#*d*/C, 0/0TK.w$]&h!oB^}|ۛ;4Y̻$fqsά)$T#Tn>Tǧ.HƗtYls+JR'B2N4^.&!@L]%Dt[ vI,2seuP3cm1l?xdXKHM˃AG\ųE NǫZ_A'mf?F::VB9MZx$}It0U!>"}2]g]HՈ0](Я T<]RF)/= W=> G9 ȇ'>=p!]cȝk#Vn3 D_%w~+wo|_%ѷ6C O9j96!)ݷ FNQOG 86ZP/5JOv0I,}(~GSH' ٜjkDo`p;0r+L- L`des3Y7gC!"jE9T~JGX+k i %_po4><x3mjk$$}{!4HMM`icK Bc8$"K3W,Mln#Ӌyjoo/TCH43y5ѢQÓժ_aNKg*Rdk4£3(6MP}H!}hNZ]0V'6 o'6WVұJkخb1U4q #{K 8;sqJy?W憍>K0C)Cg֐fwwHa]uT)I$!.Qa'hQqb:oZϯϊ ˩x_="0#HzU꽈\m~.] .ak4ಉȦRý1W(mߝUѨ ;ZS8wKC$1$S׻"3aOhB58կuWƅ}lj 삈I8E` QR:l yuzG殁[uX0@ҵ!@n:Ukóf}&4&"%!N*MvmѬn_ !5ɂΫfn}nsA\C *$ÍF2|505>ZEv5@+UBbVC w!X0B i퍜璩"Djw7r_:^ TvǷn-#T9zӎ87jnKbMb[jAڨ<ۗ&ݫ(]HyWc)T:nD9yϝn!!vM66~6qr}kmw0Y$6ioA({Ll7L3#OV.#dy$!$]<+Ib tr&f8\6QqZ3 4+ ס"v8@ IpV1aGp.w9mw盕$mSl֋=a0s]fiߔ+IW n$ɝ=JI7 ѳ+ hD&u7iczk/[/Xz¸}Q.UnHyϕT%S _p'8$IꟋtkv7@RSle@aiMEU~6ҭ I$]9F$5>H`  lLZ6\7&iWţ+[AU[}"s{)BxsyXas  U9[\zԼ K6b֣p0XiL3Ixc',byU'؟t@: XcX0)1kA|`?DFd™ ԇ*IYWN@TcuKlI,]s9_=+q@sbqSԏ_9 |A,ev{t53!z(D4!2*3hClf[ c!2PIUIS(BHl\]UMݪ猠T1H5V`Ň;3YKk b9C8yz5P>E]k=G@d#^qHSL1!mlS¯Dw(}G`_c%{#bQ.!WvJDixK$Bvoaq|_TJA400:Ly"4LAc]pV5~ٞ;& pk}'@]F0]72Gg6)WϥRN.i%JmsX($vvHA>~P\]fO?r7rdz/7eaSxzn~YM $Pu1nH #LOŠnD.+$؃x =YHw”`) f8+R^peG-m"#v5^":ݍm0Z7A ^ s?:,.C/Ǥ8%t'Þl|;Q=>VVZ P;~|X`S3Ec~qyYCHkMuҋcB|9<5 2˰9d`*=D[ڹwk[$NLL26X6m0ePݩ_Xۦ@hxN@dZPtR=1ވm[( ޗB`c~I 3m$w>KzEI8!|vk&BߵȜnΟ5S8h NNONNKȭ6ݭUo7{{vJ&eS<<! D, ae13Yc6wG - 4SLN +&. 9IILP60X9>~Jno tbZr<{z D|"IrgrxϧwUHѠ 9+kی>3]k.6V4?9I(*c8 .X]j{('2 l*#Rd[]}h̖ a^gL-jm. Q.uJz.+IX ]/ꕅecY` ٨ { m6`'0bF?t*;O^3n 5G^WA>8:saջ( V)E %4mqE-Ss2[5Lѥd aj̀Q 8{J$Wp1+^]s4~lhvkܹ F~ý%`d2Ŭg񝍍ʸI_>KF{yw (bs+xd,f6C>[;;$Db6ih، HvJu Fd@:I\IH]n__k{TZ6bHI?uxN˜ IaԆs Y}CfX<ƜK\I=ND׫]]if+XHRuU oNmD<w-{BZi=H &ϿJ$''|s˘GI_UL$=Hz?cr< v]8g4R;<07\!]YX:;]X%WvGze^Og6w?)+%WyvNs(~p)kYh9 ˡkA١4$Hjdk Z6@:J'_bZ,"GDPL"Xd{}='ׁ`U*v77/*{r>((2 Oana7p!6 >|HL BpF0 (58ɐ;5NWj5L)i\x&FKCb.< d45pȴ7nf6C'"0!Eչ8r'̡) ic#>+K>Ep;  I~4X}tw^dޥ&w)P& I2RdMa-q,,ylf*~])JrTjwѲIfrwPbtC ĝL<`}8Ӎy%j V$*b~"ed1\D8\Ko(>. :ML`||vr4luJl`2GB )]`#}v[< :<K{oOp>;NxW<.r'_ 8Z&ZG}q$2F䣮P09oȯ5FQ r*6o z琂׻J>t2WaH2]cL.Ca`hv+iaHps+݃wn7!cVѐ K: \fK593;`5ŐVmiG=kE#\_\_k { \($6FRnZ| Czˬl4[Wwn׸7#U@e"avK#H :,e̿G3nlazfj)^i;Ė1dMNfEq=I,_Kp$big[jg"c+Z6hZ6$Gb &7}URq`kyڭ0*'hKt<~ ~oDNs ýB*^6xg3.2igWYu+I7`VT‚,!eJF[#mB$d5[}UY~T3eA6_5Kb^%6M ! J|ᗳF vhON"!6SΤ X5%:ĻaAfur !jwjruŽN%L2 bk{=2:%h)waوdw-zlv\"=*DzTy !ش@o‿w0d9kL]dr>>H8f GJoP`lkKuk ڠ@ S @/>6 p".|\]SBPuikJI*I-u6k8xy$IAҕXj<rv>eZ8]2㏬2hEr" j'Nn쐈*QAP <绖@R#N1쾉,hsV]_://*CmY6TaV<)jduIԢݍln`fRPod9]l[$e:h7{T4Jo M8XF HH"Rt~k&@ o gp5'113"|@;F<]τO- <-fÕXi6rDwVPk*#5gn3[}Q|7H Y1x˃$4i $}JUw=n#GH:nԦYyaIdu;NJcL,y\SkK?tr-BS݃ @=o!MGhTM^ ĥK1/g'|d =?볟*_/N>?ݽ*'k]e +/tTYnLM9kp_*"D!$H#љ]w(;HB(rg30>GS˿:Yhf~H҆e 9|#n 7q[[S+ vڙJ/8QQBAľ1Gxx#uV2> ءEM Yg1=2\aX46b xojM 7b*I[xpҧ uAZq3ܼC"MsQY>1<;Zi x,~n~)fHGt*Ǧ͞eiF3vͫ Ԫ;}CA+k&Y`AĈ%ÑI:Ǩ( ??6'AAZyuV{IMɽr'^NͬՓt5P|mL[5@RIP 4݀K b#H68eR&؍G)'a胈_9G)&ҞJo%w1k$ .aJ{dg%ow9-4~wPK>?Hz&#~hvI@'wj8SWD26]b0q^);;]\XVثzá`\z]84|`e2gw myNzja?je~a&kLy|C,/5m5*zrzrB~Ō*4 L,^>܏D*s3wV< zp!cbA?) R$"BOcJb7qG^~R;~x`l 7qG:fxpM^o&Iޏ!_Pd{&4#ԞfXsV:ØxTckF;],&tV+W 1`pe REq6A8IDL}sm\t湎~dK>n'06#Lca.|vX$zd%hÀcYlf(=4q7^Ȥ8hbdty႙\ED~#Hヤ:V6'UK53CJ.QY_rFzW6=[Nv HSBPHbլI?TX\YZzNw C3KߴX9 ɜ;ՄIJvj$,RKK0+t@r'5LO@^ODЧRw.\o}ڭK}NCVwmJh60ח#$䨩`Ib$M @[cv ɯ>Y\AX.ZU rv4q{>^[^_ˤhhjW+gdrtp$`?|xK&O9NXprqD4QI+5ubo< sA,ޝi~>67vV7ٹt2UEÉd:2̕Щ|о`cIlj YchyRu^=}SE|aӗPA.w67w66`%ݍcQ)Ad6sCUav3 kژ%1MFzO-*q*FLa*Jys#K2lKJJOP GĶSA.C/HEVxuFrܹ0l̰Wv]foJk|'+ ZXϑn X0& TDXh0<20E]}IG&_ }|X+dN"S '27' Jmm*6@%x6UV]'\[<*71+Be_҃Gt!2TÁäTWoC5CLj=D)bPFZ[8&L:%l- ":|]6f) xt-'W`z@R<5ku/{_tM#<3d.E0mT$ fCskF_`۶zM}hwS?x혻_gSm%{7#+@g U-d" #sKێ&=_J8N[bg'=K 0S!ŃVu6dbe/$ ԽAוrtf%KW.E6gՈ@=@Qlp^]ܯV΀Vdֺ\BUpMusЄ.-x@upJ -rVyWE%̟O+K˻1t6w2YzS-SiY@Xz Vcm:BEgG-ZoRC>i,,.o24ºػhWvtdXK*`ZOC/zF]ѥ$_rP^؝ ?UR1qMafp'W~{֭?/4hg}dgx& ^% ]$]"~~O"%p|?^jeJkk;nLl}@AWp5/Ňsez^R[P'S66nmGlCI"ktLY<<|].yͼ'43v`]=AwrĸLY$N5QG7OnG s|>*p΍8ۻ.AGg p)6Ҥx~rVʐ )QH t~$p**#EOn+Wѹv $JD?hn Ka(DbC^t:tx%$+ 7G>2_bH?9>pM׺UEWX3»FVR6:V7NQS=,+]+IBT{ր6phڛxcrm/$I6-.lfđ=" lv~Slaȧ8Ĭ[`LtOQ҆㞓[Do刲*w`;JGL`Sa)=RT$`f"07 "+:ဃ+&=]::<8[&_ϧRw&@V|k+H x2n}|L"6۸=!!QD/ I;$D|k3xKx[TϠTÁRb| "?UC$[(*IYad&ބ@a[8i/l馞ҵ߶J_ЕjM$\tDz-ۅ=Jn߄j~dP`P59Ƞ0H"?ɖVVwJGIfUq:v@sX X!LM c&8\dEܸR+_}~MBl )aRnŮ-Ls7߁z,&*IDLӕ+5jc>BQplI7$njs}M~ܖ6,'֍x64e69GGI]}6 6|[gA{[ DmtNKݱq,"?Oao[9đV/ nX4PtڡBa+d!V~(ՄX`]c}Lyݰ\tFyc|w.uАdOON $]T*\@6m;;O{AJ rK"!װ 4飕$ld428[k7v)zt`x9˰RKzQ.{3uG߉=JR`{`(-]mD8%hpHS$ [5%ԸTn, ,wїꈂ5fk PmQ6L #l:N"s*?wICO(Oc][ꢼS*j+n]I,Q}CNҏ*&y78@*; |=}7bB{Ij7QiKvAatWFQEc4͉>okDY1,a+d2n0:jI9>=9֍hHM>/Ik^)ľ6z p)gAM`)DtȞVx.2>eT^@`㽽L"q_<[[,aHg?WOqYf|i$=˛[Ik ]z%hCdc6{^ ߬ pTVU~w;J\:&)WXz].VrjO&"&dY .d}mBKm{urmMt"'ʣyN zOJ>nbYJf40S'I6-[s,u jt"]HuH5/SQ02'4|!X#1g{͒GBCh~9 oPnt)dKBՀ!r$rwq;]愛XlZ.PG싹L]w"6lx2]HVbkLN:"a]L~ix8 CM""lm++Dxp(6 L\lV@1g5bwl/ޟՂr NF%u`lt~庆X;%V‰յ,#ˀwyr'l#a\t`_ṀE83KG x /qk4"z%)HGМ]zb6:H uD k ^b ]o;&{>/u|X8Ў$lQ\`x07H4#)P`mm;Y ,ll4'wv Fچx )*nlƕ#~<9.2'&G֓%wYr ^^^5 %ahk~s*j׬T?B .(HHj̯(|]>ɦ4]J5rH)l!e:./ w-&ݵ݆%d D'x-k3S<t/(lW%Q@VCᙵL*m=D}'nW sB+ť ZDLLNk·?|\ }%"r.cK(@Sbv `z[nKloew('vvb%tQ.T+,*xhd=k~iEF&=?_LbbCkmg` v}t°Oץt&Hj/K>KΈ5;anNDpy7uQ.‹|ď 8X}~+-]bzZ:<8H'3X2KR=!:k9V'{&G:y>R2/ħwlU{`[6Eu:nq:$5iR|mMwTܕtI" !|!M bG6$5WaB{ecwAaw0@iּ1HʁƑWjr&m S|x'.& IDATEc7F1n܁;/A3Ľ%&6+IC `T<4ͭ%Rѻf^/j-DEґIߝRg%ܐ)E#ij ژ&/'TE^!l'd{j%%]蚈٭H$ PXPX8%bمոj$6.NFFa=T`Bx"\:-r˞ݻ-Z=GVWv"3\خ>d ^Ddie{>ptxdk@ OۈL–ZV$HV?_6^_7:'%wI]RSY/\NR'pJCkh5Fw=M9{l(d. wy}i)]omcE Blh2}w'^c#oNB |ҭmLB&솾Ic~wÊϰCON-z#JUʜڅ">Env٘2{ ;8b!z@7fx h'!ra) Վx,iQ: э~[-ѿd CmљCg=OX#OXM|ضKtn+R#LȘurNˌ<<C t\thTupL:Z.tªnCڑk $RFGZRgݲ1޾ճ`9bjKզpۈ9Sәf6K<.o)ȑwIZ44rIsH] Pr-l:n !@ajTpPLhIWQu |hRʤ2|fvrp݅/jq*sd eQE #d!c@?t,Qf[jӤxB{ u\{fQJR6ZRB6 ՍUڶ [<#O6"U'YˆmnrŃx [Lc_?m~&_=hur-@H;ޱ CH"Vc\C܌#H180e , a]_tϤ]8 ז.rgt<˶ic~4 8ISn`y]-/a#7i洒%#ͼ1H ;f{k3ΔٞsPk_4GIH!6ݝ Bliԣsӣ&>+7-ťX![24UHX yC>@|=\sJ(VKDbꍈֻc-? R$H*ӥ@x̒so,N$K[C"66n^^Z_[^[,AX wcI~x/;ݻ Fh1YŌfff U%yY4əٹX#+iKZfb 9:"[kNvV6fa!0F@(c%,qhB*AwI ;NOH [|얞eл \c Յٝ;V)$.MNvϊ7 z]ر# {{bcu9!Efb[k!YzkfJ j{9_BԍiiI$;h A)J ےzkttIj?[#OUh ^$pگyދ]]M:&GHIr)Y^hNf$ؖAe)=KG\tz4= F9-\G3W*-@Q]leFC.tꚱ jC*3Дꐊ[(567MIKw_oՇ|p^eKRn1cGr-׻3dA&aMn,!õyM omtZ8|7G?4sȧÝ/jE"?[z\H8{[I^c_hI>j\iH$_$lFFd#uA\yHN-xZ\k{drj5C"TkI{1V&u/-.>=)埃j&N_,zև}+KkPVuLAdu*h[s*G\F#5 eu1ez4 8ll$9߈Y'2UݽOǹH*;Q?`<3Lj\CKnk`OwK$h$*6)dspX%i8ɻ4w&lpp%oO0$M אָ,oonn +/ hZnReѲ9=_̽ RO+@_gtU![6|!UMJ$J"Ef)1jvOl"3 8{W G/r{3#SS)Hpynnceř3N&ڐsKoXN/epqy3urI }T -mfS@-H2S̤g@dCDGf6V7 {k/\'_ť"+빷bbc|JG<%t󑴷-Un "XRkBh)mqSW^Oint+ $=/!MQكP=6>&韆do{wscKݚ9$7!HTظkIOdd{wiqMۚm6zp4됄ݪl5l Ú Y(]9]P,j¿Pb e$+Ԓy3I.>ӅKKC{Zx6_x>/f`+Y9;ޛHYZ=XiN} [QIci]S'$]E1IwcT5~टY掞ćG䓈WJMlq__>/#2ք/Zؐ8?]^\i^]e1"K%鸇}i%l)C٪+~>';9ܗ I*$9rT`8-^@Ustt,':Aޅ6p#X0[;~e[mp͓lQ#1"x&I 쵾~ci +ͽ}LL-DRO+(TF.=GgZlI oБ`خgQ7W#n۲ G !JT72KcTdz;bfWH@`A9 GJ{{pXKBR>Y I{Y\y).GV70y%FtH2)Gg$]HRPӋS e jC\2+/Ҋtm>^)xw U#*@v9 TN~tJR> $Y(?K&Skw$ҍ877A Vנm*IC1p MDlIRCRGXLIu2X dq/SD^_<)U;bcuumiiٯ[P pVs#$7z&@ݰkCND`M3@8( ƞ`|:?OهfEKgF!Zkfwh?t02IdcX־\09)4KD /IKlXыll7ė"Mѡ?}|LʏRȹ/-# #$gɖSx< R2/gn$;sw/H21U!Ɂ ~ֳأ3IGn*I3I++8W#cq(Ékl -76$Ut_pZ}Lm=Q*6RF&UkViv635y6=yxzGhddqI3Rk^=>ŞVׁ<<<"jgn[)➤wAA2[Fg^ᅰGp4T;TG$ݵNy_^r%GUM/Ba}84Ÿ$GF862_߿܆64XL(m/X^vcO6BWzpл"D RΤoX-"IbZ I)1qQ2zd{IޞOxwhHJ UyxGnRXJ&OnT CʤuF{/Hz?GJ?Q&Ԡ 1m4ЇiWx)%M9 Q?ܒCK\dW`ElP oQ*k3fE&jg[[# no5̎/.n,̯$cUb2k /O掌3-wdw܃R kHA%XGQh\iť:|=XD\)RR hGVOOlfmHeo}sr-//o*Iݽ퍭P^ks{+0 {+pu1~_e_&&]LSPaKl.=2@,=*18`T,'Q--Ꮧ~], [ʵ˙Wуzt[9~,A1*;b*z..\ɺ T)`Ko1*V\8n8Gؒ4D FM&+pZ88+>6,2q' ;;H nu}qqtdjPB5{@R%g8N!ED>I_Oz=O!?˸^yH?ߧ fossnj K.-ݿmn$DW `ܟcs\A+ JLrK1V^rT.\%$JڙШ זI%#-CRM UR)qC7j䩽B}B;xR<;A; EXJ&|!OOnN4QKr!8KqHRs0 HR6Y%$1xwX:@"ks`#{ųM~;XI"T)hmelPx;}M!6)\"_4(M.!"&z#\ٲFd- k=F9q]ԑG 0]X\y]yNSk/ P֖v3Pg@!\鸓Ql@oVCPI7oʽIUbaeZi{3pth@RAjYYXzF~^;ջ9&m*G1YIo6gHhl-Qؒ~J$zGp2Cn ~tp!|`"ւao\YLӓCv.tv^A yg2Ӈ|$/(]ነFJck IG&OTֈJ?~ӐtS95N*bXUFyP3'g}C#K H kH?񼰷NwQ%T/먗u+{FskDl5&t+yGei.EHf%Oؚ|J"n;u\bHrӐ>K3+y6lWG`fk:ɟrtf !L)܃v>:l,@RmMJN)Z5JSn*~?ȳ}{{yntTq{g}}qvxTmH< lR&Iz9H`H[ZXXXk K_ܺ^%Τ:i[3x|uEfH"8`emLB噠;:> IZ^{' &7 ~55s mz  I.HY)Q.ō5Rd+3Vق@";ΏLML,LLmovRH 9t} CG4uf|-7Ĭ`j#8kr>SG^ߖQؓ2Gؑ}mԎOT";#\C]zrGWVxo 3#ބ5lLOϟ-8>FyύZ:MzsrrbͼwݢP]r)g|],#'4%TxGؙY*WN_"GI*73b+Y,tV)J7Yդ4W:&\«l>'nOwNkYBB \f#1\B)o1a#ՓCR?jg3̐+/\нymm//ɾJ CG0ա*4nFFҁs Y|{L=UD</hCz,_okLv^ᅃ$DC$=P+,E8#8:@v|I1?0 ﬗ{p)!:݆O}x{W@EGa~WMB9"WI껳/oB\qF .Z#F^^~ų5J4vfm ;=Y3̎#k+P(>78eH78=zdl>l)=F$f~;MLό$sp _JPƎ$n}=vs_u&+^[?/ds#okV^DY]^;)~:=^_лl(́{D~Eoɒ9 1+4[q RNa#Ѩڳɾ!%: $z )0%M!9VEBADZธŨ<7NХ_8?iTxn).fJW\o ReqeV,;?>a 溏\s<0 $U/>adKtVT\{pF ?<)CR@tC 5Ӏ0aj #B7r{j$]ur/0A* JLa+p^0_DF=!>:d!&,')WQSGFbu4+g6ݖު:^|nBԤU=mo-4:v˻ɂ ߛ] s<( N8<2v&P#)CRԔ™3Aatat 3dD&sd,]}maͪFIy2Wr67d2 _b|wk343& ns _ IVi bߘLe&I8ߔđݙf(7Kk-Wp{pTDG$+O&0K I2$a7VaSO%B gfZ_[Zz^8a4qO 0`{kbd\4s_GjR8*&-= ^,[c5 :F"щm[kBJ-]n,QQ.HQ4fO9-83Qfrj6)=.$#}{5i,mwprlffy`dN#HЈ1X؜S )gLҥӥ~R)gAo*5DwY'm _9Iw )sK>*p t ZE흓Ã3.rdךa>< <ӷS6[ۓͦ^CO$ l8oNS#c[A%ʮX 9 C>ib HJOu%m&]L|E({7Cbβ lbrTqc2I>Q@KBѷE-,IƑwBW49p^,$X!JH{seeqvveai{mBgGG+x -7Ɔ2o\3llwe%*%Un{ $јw8( YUᱲX0>f>~RL7;Ks##2cwSI- _GO푮mOo?G!]At>jZxL]3gAl@;`{&׷yJ*01D=Ee9T$]Nl6Y0-6KRjM&uQDhxʤr{ace VVV>LT x *D#JElf&KKpCX!=LRmX+h8RJՠDF\-ΑUOe^o҆8&` J-sWWx=Ʀڕl҄Ef ,Ya2{x tEh[FtLj6$%[>-B4b;uiI#,6 i"@G[YSgf>ϖ+]'{F I  Pw(Q>M*%:4A&H$pRY6^Io+ uV~) C&. Q[|4OuγcX3kk[G;~&nIZ}H"X|z<<4g|/UĽLTRߛm(r5Gm..gf\I؝pFY_.[yq6?3+3z=x17QPyzRJ gR; z lԇb rq;~vtS b'ϐP$]xeHMeRV4F`mp5f21 ]Y\X??. եٱ -N2!ӠU[;k+I3*[^*8(.`~eI7,q:7bxV)">uJ&?P>hmԅ۠x B,j7")HjH-;24gCmOvKu4&2I)/`PI/3pKw"2!#xɻ~z|萴2?Lipk}Z^son=Rgn,5$Jp\|Prm-....Ζ['OGF&녦.R[>諌ZY7 ŖԕўǓ:bl e?/NF4'EL1$c lmuCҍ54T*۱Q#rpy GD3DEGҽP^xTdok;sTR|@玑w^}8*م@+0E7 37 >|+eu)7<[q;w}RI蚖eg7%V84Yٸ-QMnxe6*K<޽Znϯ 53hKKR#FV9j,GPI .!߸œ{t&CmlHb>N_= w|۫f{qkC=0!aOu)U$EŸzDV<&M^7y<ȻN \k˫ jI''+エ[ƉZҥ'W#XD3f}H hȻ&;H*@e۪I^v I<"mFbʺ`Q8#mF;IR)?.{5߉Ӗ^I)$F񜠕/2F؆5 4q}2U#nȹ?Zu}FB-#&;BkμYs=CJWƬ"r/.VH>Tπ"-\7zْٔM0[ih FGO.:٭mohUhMEseQ?z3?@QXؤ>lHzdA @70q^, %mŹٹ,o CZ$=»MGyqJDFe/XXC<]@e8S;[NehbNHLwIRw ^歗wOO_X3Vdr{mmwc] BϏOOFzI{)Q4jdWw ~:; 3-m︼FUp}s IDoNRi^$ƣ%@*1a꟞]m LI[W&B =2){ I,I(Io8_(>9iɾHf3Dr?Wz)A2R_[ik{}xOXvo+Vi!)9e4o,m2TtE6 v;Ia&Шsh&7?C8?(Um^UA0^_^6ɫKk"Aۤ"OJ?;L#:id[G*emwZ$0FIݎM#4s;gJA0 8[*]Y)Yl8RD|kXj),!Iϯ,-ң; ܤ6C CU:3>=Mza].RF_\uf zKJ$_rbWj@4YV{ݭd!VY֖H[Cr[*)=Ick4F}ǐ%Gh0D4AlPHM߸'tӓU+jynkysWJYۊK:Bk5N;"KgyPFI&VUp4=?4fF[iڕe'm>URc4fi#M !B@c2I/I Q2Ӗēa6ՠY_ w*;tIo'M0kk33b~ ,Q& 7Fk1ܨꁝ^E]r[҃5mYRDïCRy5/NtxԒVWv76,>!,܌3 }[MV֍}c*YIl%'ob41^쮗w(Ikntٚ]Oddd&?0~d@ I~չO8j7_VڽvLGgT&'N8}$ Lmql."!ߞ46orC֨*e Ȭ16؂Dߜhd)6C4HydfHH kf1dщxnF ?Br*[h刣s qbRC/ I:#{; ݽOC#Пĝ֮f27Mnn[N";O`"`'rSJgJH;{U `׀IOIʧ8)N:<у,~}bYjDj fg hIw\kAOK#$NQaZ& wvkp2ˬr>MOqxm}+l0Xkl<};x|I; 5c,&+n>a@c jSJ<-K]6?IqUH"Scc$TƲ ~ᇻ{I +tDHh G!ivbd8:MӋUՈ4G׻I7-#Y8;/6r;$eHk*Gf&l.\y. +Jf _XR2|s'嶛C\9D&fi<}'궜xIQ9$fԭ}x<8{M]){a8oFYڨȜ.0.%& qF*L&;8:iMի\Ghh`d~tbQfO7⍨dn@Ms;Ny.$}?53`{em`\_Z >$n$kvsq"VlUZn/&;{h)'e,7݆#lPn>"1ҽߋE\E\0.:;;xK VDCņH3`h4D) /OmZ8ynanQb譑tA|#K2R$]D"*mwGdfM%-D64x{+K +v^4Xm%i@dv^Q:Ve,-w8PϽMLGg.؞kqg Kt 4XZ6ȓpM^YV@%-_$* Ԟ p;pVؕHm4ϏT ~!L\di/>r>)]C^8E&0ք,хa6@lX2|%fRؑJ:^t3y8 g&U4Hzwș>`n׿Z56Cct-]ʗqmJ3 C ({#t]@/u!'@]*wS|tS@҃ IvX%Hh#+-d33OiPj=ur(+&?n,xUwFfy)XeiB4o$UUzMlԠ/IcPəîv ٘PF'BIl+?E$41> @-" IR&(GR2t4!Ԓԕ&:s[:$]7ꊜD.yxGpLM֌%!@ph .Ҡ&>_@<b>pS4al^[[Oc<0cm ^F/j_Zx6Okv8v">Hۄ3,y+p~{&H&@)`Qɞ{W؈y7pL0bB(:bP[u.oo[FWe"ֆeH- g;I@rjplIX3[f 鹞xIVtG>̋T [a/|&`jOY;]L^JÏGsff͗M.A <4-l~p儖d.1_l&/|曑i{}}y~4?t{cA⪑tq4A|Kb-%e >=ITd 6ɤ3Iw:'&f',^$=;$]GFg^VRz  5+N5+5a;F߇w? mmPxx 9> vONAȌ =7%Dnpvme3%eN&T%HJ™GlKxydU:䖈%Gk `σ<$NQ!c{ٚ2T](ߧ'RX(=%s`Vc)G+޺w{]()/;lWpkMVTÝӨo| 7eheE%y0 AeF+R'@(2YҾ '+4&JM[H{p8V<# %%]{ u ^C b{ $~{:<7E~C#CmQeJ=/TT0ETCg:wL 3n%VH 4%8X,[I5904  i/Czoз IeI@"mqy24bKJ}9TG.T@9J#cs Ls jcDU8AI9L SNwnR9/זW[l~BEFN "p-C\BsZӚd&xxGZrg"*q*J&(6zk(ctti/sG+-HKv. ۻJKB4:QV髹M"$͝mH` '' W9*׭-%9+TA̞銌G`sH` [1xzԖ3$)HW&6,2CدH_FjlnYR/n_^ -c-DP _6&M(902nhqt&o˨(]߬=]Q9Z$w6){`{#8H9D_KnǨp{qnnqvv' v,,--vw׊{{<$ 4P2_qanv<+D hIkka"{qG5<0(%mz@Ca /U`s~z&̴ ;dԭYNYQF.)+LQO}Ӑ8/ I}ˆV[u+]COOH u֖ل78;ZA:ȷȏ^99))]lD ekʶ9_oDmurG6/CR7I$U$PFtM-9I8Tչm7+]D2I')ZQn9hHW>W|߸&U/&&JmNƖkmb;2hևoD7I7XjQU+ 2Rަ%{ۮ ;/92Qrc}"-sfaCWrCcK5]J$aU//ใER tH|)N ::p5-`<͕%R_e,Jgitj'/> 8Cv%I_+Ʃ5"^88QUמoh;BICg?qY!eQ,+gDT*IAR^^phr:$QH; 74SU+OO {H`{{ea.mȍǤ1eqff N=k~>u܇t%[>El o'lu6*=8?Ox {J><IO(fRN홤B Jf{kQ*~^ZOZQ$)%T W7ZІݸBIeJ76\3>][?=ruCmv8 R6ΰ#AX-vHОSR]t7;jp4h/Q (^$GE~d7,iTU]'Ž$$8;tcu'kRt5(_+ )^*`}wc@ާBagK Fe/OlI_h}Iw w罤Qљ΍}A . {[[ , "QA޷V!-t'H}tDlKBjV@X1jM&gKWD&_aO] #HDY~k WXi-OEjmDћaOͬz[/({? Bk3N!A[Kߡr3@(3Ɛl>Յ!_M1ˆ^hȏ!,_Cl϶ "F/"V݀ -յ'(sakm=Fii{{}y`hsy^PCjm_v}+& B9u Ry#F7ђJ7I1r[tڒݶ_| /IGŽP4rDm ^\zHpk&H& Aږs'ŅtvDgԈ;JWHr[U=H$AduѪq7ϋUiz{H1r>p3-qiuaz}3I{VnI%kq-'bXZe,׬~&5&XIE_T߸+PdFtۯq߮ˉhn`4gJp&+iwMI>ے2H}HJA&A,j̒:zU,I*=::V {\ ɉ9lѕ@t12['coe8<$w' i]M*/ CE-MV` 鉙KR[Љ5UIsW,lOl;lNpN8$ `I*nX 0ZI[sKGo8gpߋĭ.61rQir*Ը@7I:I;WN f7Icc$OYq=EiT>'dާ'%#RYlwHv $ $=Ew%IzLX|# $ANQ w8&'2]bv{*$ɜ}r.pQ-Pl퀴+\%׽j" IbGVte_wRCpg`se<հS(SQqZ[b\`]?5YX*/?F qF7.ZmImKioow[ HBû2]% epuOߒ$HµS,I|[#\/BݤI_UIpM뺝]Q`o^Y.zffce ޴3dawkW=G@AUA\2I_L=1tzJ>T҇p֤QHG}rץqIJ}: "/={}/uUB!w2D ~N=7D$iku-_]__YX([R03s}G晜7VيxN_&$@6# $=$ڒ¨-IٝɎy~ZVqRت^@.  7Kg?WV+DtD{Zwd% Ys(M"iOzmH/I_Uq]a3hoޓ:+R$$]7|FH";aK\jDo%dnTMVqc ^% ni$+("4iZ I{<$Y$XHp-!Atl<2ą%췖I*! H*{ロm ݍ xCoWrvD : Y I_.͞)>R 5*u{>?ٷVVggpYapjS>}1?@W$\Q2Ї~jzT_&fzE/Zn#⌲ C#psF.0vI"\ w`L|>It1Ix# (D]O|aC.|S NmFKdN8EO/lupUM.1ean Ƴ!?ZCmHz.H+phɝK Ž]#R]% [OWAtTY]X"L$=1@WoFզ85h O 'U$R;yCxк|wv8xҸ]IrJgKf?,2OX, 5|-@GgJhrYg`6&^0@m[@@mo[C|m\n.,loѬ/҄x|om ~=FLFGu3,tuȔX'p-T#زGGAH'y~O ;ly9spHA2I~Xl5CzGpsmDP./8> pGVuM<1_lLjOM b;F5Hb E NHBkgJ%*W>'m_\,m,c\ɓJ$XdnQ .=|I/ I׋nB,a^eњ;6\ &$`+$dL@9T:t23h" rl6D+~H۵rV,>{^,><+糓OKK skk#=\[/lӯec(&ŦWBB!GJ =Q2H* $5M S>|{ZL$I;5Ŷ+_ӴGZ#-ؖpAu;b}\]\:}RqVݽ?/ΖYwvڏـ̗9'0TLB>am𭰍pЖA:U[k&w5Yl\Z%o[I?D $_4 =M3IGWS>%wԼ5(e斎YQ`˻ݍ O]D󜿲NK"p|TnDS,@ܛ{<$b!xw5({ck4n+C{ҸMv\2{M ,$AY y 'L _@ҿ$aȬЊM7I' FU/[ٕ燳ܳLAXsuq|tzgs~fY9? ]'0d)HK'qqEBFz]W,w).. ͪW|'lEȠM\&$~1<8`gh ֖zYq#@W$ 'XIꞚtzLj Rpj \O?mmoo,<[Q[W3"WU$/YM3CBM'تJEx qƊr" 'Gk˫Pq.7 ݍJoP CR߆/I"IؚPlZЧSXWgN.d#Tfxbb6slE3ݍ /d tPtz` ǃ$1rL{?Ύ?HXk+k=b]g퉻DsK[a+Knh<}>X{X~Ȑ -eMnFD90GyҾɺ2Ϛv$-=$f7 J&~ZgAH 9$WdM{r# @U~hog g^XpGH7m-kt'9j[$.=' 7Ky~vvovGNr?sl.P$*-k[$L$WE#,+W푙$^WIܱ2O# _K;Xj/`bhF 2]{"7@Is 4rDh0\N^#l}+p: 5TGSa5rȶ,9>UwGVH| ъ0ɥ3p^ ;F4Z޶Q I=8ĺ:yFD1V $E+> BߜP8[;vAeÝgFE1^Ar~!p5AapL܂;bc4TgHFϘI2 p+3ʗВ Z 8٫lL>I?TM`07dyk+VcpAIJae$$OI[uK/@ߥNd Dai,QF`JѠomlgmT|zՊ=<}躣͙GAy ٌjG' =ڐv>ShJ)%$iP)1=@ [Iu}z|=Kss$X I?^܎ct|{'$7/Aa-7 '?>nVn">]Xڢݨ)x)H>:1=鵑RqB+@R ")_t?`α4A4j I~'1@ҋ+~m(yhRmliɇ [kkKKѲ]~싸x7Q5({!e];$IwmIYS6V]jZ ;ssH%_@>?*A_Ӈ";?6Fފ;Q9e}k|xJ&r3%ب5>T Q:(4/t~)zT~9&$Hzt`JqX,y)"\[X(>v/U>'X|z2;5Ӭru9[;N۲2W$4XQTE[y9tCdƃ +tx}o?$]4ui"D[|o.mvjz~j/!j'J8ؤ8J3COO֖NDӖEsr A5([^{gI/)Ǖ/D.Jr@ZWl .餈u/uqٌX=Hb *$ !H*ۑFX{q'pwPޞ^_H|'FǓɼ7y*;Fεhŗau Iq;NSGʷ,ڷ ]` Iz=rRX?d{7Fk[jxd$>(7z~ckHxxns4)z"HdXIf5q+#{iKU@BQq{}ڞAsTg $څ no %Hayµsd'1\]\|$8;[^7jbD O(M$!vlҐ/M>7|Wƒ&[32Qn3LlfDEG2 $s3N#_@I $}t'\}xwo,!\5|ld *1VL |$I!Hb (&ƨT1քG{+j{wjٙEԙztO 5[z%qpz>ˏ$$!tN=[7WN O?:- [\%p(HYb@Rzn3CRX:eaa'6!TNb $HC% -LdЫK!T}+ʼd0'2D^2I&)0mө!EWjKtU$w6kbbc3:i$=dHv! #Hbilgo_>yqvqt ܳzH8Y_̿O>7v.x<]OR^HK-u 5IW>epCK>Hb $U!%)1oMV2?ǁBlMݟ0Iդ.~01ZK=98Hƍm +\+mG|ExڰNd $i>$]QaU wʹ03^^[XYbvqTܠez+pma;}Uj=W`\bd Zэ$X p3@I@ҍAOMblsxR<-ϋ> fC M| mTrHBHH:Q-.,"%&y 4 TN. m` $1!BIId)}Of[JwC?/NLv֨pvo/J:nUǐ T>T4r1@ҏI *s m,Sl3=4sopY*Vu~$<$U(s^J" &W6>E8<:[#jtw6({KAt3I $}5HY4~5RP\Teˤr&Uٰ."| O I0-G_ u҂TkUHb 黀EHA`z'N-#T" IԖyqH")m"kQG 6x^,0>1[/ky [ S%U N IF=IJ4? CiEH>\ڠ{ź.Ə C<.y! > ;_^&g1J.oL18MVm!1@I/I򒗙$6\v2ؽBv2=$[|+ =pwD"㑤e^×?? )sKBF%zNft9SeG{K)ilH:dK-hFGן{e/۰^8fIe/)' Ba!xюx0pQV#b $^H& יcA嫗uz֎N\ r=$c^-O_6k:W|fv)99^^,"]ok5R1@3@WC7"*[Qzd?o"pZۣ!o6#$#"fZWe' xprklΎt3n*vvE%zIWAR ._`ml yrcCKHb CU $1?[jA[wvz'67VϮU!GGۛV{! ` G#dSPXS~,233 ndHz $`"w$PCІ%A}mMeQ!  O//}>=:CHGݽO/l+r{rV0';.`BXN j+HzِTaw[Y-7M4 SgF$v??;f:w٨ŕ8ltGD^Hzy H)rjaRRQ`_VB_k.-Uʇ1A>LVZY ZӰyU _Q^ ~E1lM-')!yUvԈU(Ԗ*L93!Y '[sӷ "ѩ6o5bec'> $1Z"u CBk\q{$Iԧ>l ?uOuij!H2T6}٤Xv:qTPVYFV$d|qV,lmu{|gc%#ÛQEIb JguD5W!HVדHb 鋐$y7I $}$&I(0b4|aw. yzpH ?mDm6>D?K|k=W)7)nid $&"{ -[ŹۧI $IUu}h.@I?R& ۦa diE.Pϑǣ؇dkuumiX$vgkMFUONlJ qCj8ߜZm7Nۼ091@G$z2IՒ^~ \hx'5٪:IwQI/H %LackRfq7oPx8]i3I_~nZu#Hb ~W<.@IwBR6"0I $q) ۊfc Պ[kP0+L6o2-nɭҹeVNiPtgN=IB69EkTN4[oUzz& f%w]G\]H,)0@7IB $n[Q|s3'$εؒ0IXU22OuEOo0wu*O"uakAV>Y' Ԝnib(Z6=-s>!z&Ol$^ >r<Hb 鉐 *?Gh*AO@I_$tkɽ&~@jX[Fl<{f槧\Zf'pAT/%=$XN24"*I ${d*IUqu"'W?ՈxbKzskާӓik{mRКk7RPmIXN*@A@=ƲӭQ3'Uz3@ItIgzHb ߧ&[?Zy;IGfw g3H$%g6VW ;G;mޤ gVܑ"sz`_Bsv%ay44EDp``d?7d $1@IƐ$nؐ.>V%"1@ғ@[$ѓIPmR^5D:FbWN}C_OybjW` I#uCM"جV\<=bftj% D i3$H~!@!I!ɑ[R'I $}oL$RBrp['n}leI,lA(7fSnvu*zY0#9E ~UH >9 q"mS`.L/9Hb r)1@3I/"O ->{ KoPxj%u:75Jꆨqۚc͌_+1|Y^D،!IL3rF'$H $1@R=Wvi-W=CٍB%c EjC tFywbЄ M='j$t0$w̰ Hb $Hb >)%* p"K* M15ՇU=|S鵪CFU(N$$x@I $1@ILHb .KTBD J91E]V97I<B3Hb $Hb 'HB D )Q`#왘jCIPy` $HƦHb ܷh3eZ]O`J5!5#PҐT$Hb [$YH IoIf*kaKg $1D3Hjb kC)}q%t!fwBR~М !!)nWoDd&$#$O bkJ3$KޅؖƯ wΙ3!$E,dBR+ǐ)HhVkH8 U>"!HچjW("U-\]+۪XՌH8 t+ 8%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/IENDB`calamares-3.2.41.1/src/modules/locale/images/bg.png.license000066400000000000000000000001421410275732300233530ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/locale/images/pin.png000066400000000000000000000140571410275732300221420ustar00rootroot00000000000000PNG  IHDRazTXtRaw profile type exifxWYr$) s$68s9<]]1EdB {BP0Db|H5FWdz{9n|gۄkGr]GIyEw#u=+׭m |J-c]od<or'}3=aFh|Ak GÎ &c#'t``nM( O@;(bj J%%+ÐFUWps焚[2q+!pBSל81?|eWJˍ00_̯:_)f:!"+ϸ(BA`,0۲U@o꽅Ȥv"p\H61'"( (sv I$1'ˁ#O1r.ne}@$/\!R4袏!ƘLr9SH1$IS'^DI"!TT5g62teϐ.J,Hђ+§jJ՚7א&ZlIӖ;L}=ԥk6#8Ґ#?X;~*/F5^Lq&f: 30ƞx yrf*cSarcM@aЃ7~7x㟘39>kmsu1w:>wɆ%C-WT:kW!(l 3XWjncN9=PsE9 w:{ɫZC/3EHx}dŹ8{vϹ+ldXҏ]z.כ~UD6fZ5d6SXuprq 8\|h֘Zӣcec޺\5]!o׬9WZہP ʇg;G. 9{]ym{|P$hcGiסNʦ*aapA" py.H8齇aooعF Venp bXGtR뽶Ixv~0[1q~;D Wl?53RSrܞY9|}H3o~{Ywڏ{Z\W˩Vw F`{v">BH؞Vޟ/Y+:ZztӘyu_,vϬ_ҝyꉙz=כw{MB(/&̙5>gzTXtRaw profile type iptcx=A@'Yփ7?Vb,N[JThU뎀SN͆^4ENbR@hiCCPICC profilex}=H@_JE*vqP,Hq*BZu0 4$).kŪ "%/)=B4+0hmq1]"&3˘$:{zY9z՜H< & ޴ aVUsq.Hu76өy0XhcYԈ#SXY+WYu#H`K BA%a#JN;]D.\%0r, Zɘ]/1 wFqq+ԁOk--rm-M.w'C6eWy) =k^o}>i*yc^=WXrhDiTXtXML:com.adobe.xmp 9N"gAMA abKGD pHYs B(xtIME`IDAT8͒1NAq2+9 KD)@q㫤PPs\ 7XȆ.ٌ^擄ly1  'H{1GIH-"uƘ'R9\)u#ڼ axoaB+~rz}MfEa:8lZ:+>+;c>OFroƩmya126Hdb-ok_MɲG߲.*5xOSҁs4Qf-okV A!%9s45'Ini׋xR$~^W_HΞ+Vk|IENDB`calamares-3.2.41.1/src/modules/locale/images/pin.png.license000066400000000000000000000001421410275732300235510ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/locale/images/timezone_-1.0.png000066400000000000000000000273521410275732300236430ustar00rootroot00000000000000PNG  IHDR T=iCCPGIMP built-in sRGB(};HP>";8d`ATDp*BZu0 4$).kbYWWA|89:)H&1܏sT38eq!]B>`Fb>'Ix=uRxwߟխLYԦs'tAG.q.8#' 6ۘ x83.+8*kޓ0VNk ,b "Ȩ2,hH1U#*P!9~?=[3?1&@Njm ]QcngJk+u`ZK=uKI ɑ<~Fߔn5wns>iU88 ӜrI[ pHYsE1zTXtRaw profile type exifXWm& *$W򒼤56`@A%X36 Íݮ}\sK(O[b^(c}ҧegzf&EҞF7}_ǒ㵔g8}ExUwz kZG!{)_]}?8Qe|O &+ (;sޮ{mN)g;tpy^8ƽ\bNB@eҊ+UFAhQ Z@'eQ*\ еJk)׼o^Е +xgYiu\T3}CQ, w@~/q@/7+ dÌa"XI6y)S瘶@d˜:d»()тڮm}=5:5&!ʑ>1jAYfy Mr- .ؽ!%p_!tr }'sB\}hDj'ٗ9}tkFYZtb05 v,`,A]#t8W#b`DW/S5jMb!»>{~6WZ}Yc=\Ƽa`E8Ft`Cq'e>~B":/پ{EtZETX|-GY4 !ߗ%V`SOZ9Z̽>I9;W]\pMsOD̖9|0nejb|xq$)1'>Vۺ( ~UFN=(1Tf3!'$d<3DTȎ<|;l3{: {Z`iynQQX+m]^gG&zX&]'2?KVQw,d]*A C)yŽaG-$@&ZcDf8!؛b?"%PC6ěmΣ Py$0 &.,IOYx#a2H"gG Ç4A+x h`3~q:9&~ѣu'BFF][!hĐآB13#;) !%z] z#{:!gj}=Z>j{2Qв ql;_-H݁0=Rh>˰0$ŀy'#+׵kš: 983xxH,%.)g)عC H!E&D)/oK_Hٌ_AH> >|E=lpO u:rvki2|:va5 Q}V>}Or/9HI tpoyҏ7CHRN) 1 )Գ^1@Sb7D r-ngFܰ,z~PVb#: aB!@!@$Aվ#5oi2mLLS;rKoz큾 Εdb0!b]PEE {RCB,V]5H< Q$0 FSyt+(096V1-ע+trN4Ow]+8[=ӃRl/ .Af;q]Fk4|4{#BvZ̙yEפZq5&z\3yъw1g )f,dG~RrUYo}{\%B&xR\){}0 ?^h5P Ra}Sա0]O z,7u]9G n_rF+Qo\˻: pS^GcO!L>wuN_w r r r r r r ru_[{HJ IDATxoW~9m3sH"lZw]7[HhM K M ?EII6Ell&ήe˲LBE9ù7=.$C~?&%~9J̯$) Kܕv·Dvc/@,@,@,@,@,@,@,t{zP0&4aZ1?s *WCS]{aZw`p=LTٜQyuU["3nmv^mpЉϞ3Z;^ԮQ xs+vT~kjsvR?ɑt((ϊDaG۱:Fu\mZ)=W AF08ΝO\|s0$%?~:w$lVmKN"?n7a6o^ml,]Fk1k/=S'I~]+ J{ddں5kSO+ՕKIZ2ks祍)/+4%"Nv' c"C083/Gƻ/V.mȑ[LʈNmީn,`AcAOfRGL=2^"mň=C08feijYbcwW_~'];aP3?3 :=p'HY:amvUbv{d m4ըtJggO{"P8kŊxy xۑC^~T\/xfRZۅ 3ٱ\H"Q(&v-"N`?!tVD:"l-^oUVdv[;Dv0mx/U =, 00"1KZ_ls""R,:'cxtDd#g=aD |&ekV+o5ypH\_eP,ͮR p"XutldPSM%ߚϏM\)^{rΕVO_ɄD#ϘHTZj8q?DWٞ~sbt͊o`8/|/vOH' $[닶}cF󯾶f4)o7 u /fW/.lj*nb@Ol8u*'3.JN[ͦ9Y.Г}oZ|(a3]Vs}?d壩Da%r3?`г:_>o1>GuYf) VⶽT8rsRYȏ8 F0Ujxߦz@Dӑ^UAf[ki y@#+5ژ`KU=PO2X_v2z4/r0mQL^[Ek{ũǵTlNJF%C09___SH.Rb1jfiui| ZG_|V+ys顷N-T'!=gLˉsL(?)ּ T&+ nmikKCkۓecLH,=NM 9]O%FL-ݒt50T?: U0j[͆z܊p=e#5[ R&)J%J_.Y;U/'R6Hg7kbw@o!5@v A¦zbED88Byd~=^R•5_7@0S=c扙p/kTRڶS;vtZ(⸞I͉'L->Y:7@a@ϘOy2JtÎi*l'盄DZ^*=v L_}S7{6~}ޟ&@EQr%~`~zZi7Mmfs_$kZ"mRI{5;>zgT7;HZjMi9u+һэWȬ/_Ti_ntfMRnKF>5>޻@&<LGn9cg~qB;6.+sOo ~= zg     084VJt'FR<ГxӚbӪCq>5*j5:9adsp8pI.jfֹ^>9)b ;JHB ՠ{(+򶈘=p=/{|~f[34Uۭ9[>֎v~#Fm|o_C08P+[1%]x]vp8p7 b b b b b b b b b b b b b b b b LVu{ kVyklݞE0NZĊ-_K}=ZyJec*"pWIZKuuQ5UdƑȼx-v ۺSYxuLljv7@"`E(km.墈iNV>jId9Ԯ>HkǺnJMN: 8kx*$%7X'7e~HƖ$1Zy2fԪ7D-R[쮿Wk+s fGKG&_[c$wvS7 /'Ɂ\sA^`f>}rTVu׷a΍D0N2F7""J>x*OW&{@)Ӓ=``$@"""`O' Л`~bǪzCH(V""`/X,D0E0^P<% Л V% Гx*&Sݨ6kn `Yc spؒEzA0.Q/?;ݞŖ$mJ9_08ŬUJcMa^/Xa'?秓"^Ey93zm6wu+}0}jș}r+%J;1ۇn_:%]S^>x#TIӿ;w"m 7 c+zesj]Yi"r!`w/]XW]{;f'~p m:惛DcQD"֝nlߖo=bp``I: G}zmpY9;Lukީ–׸yކժo:BsK#Gi-/?}ۣ -k{u[nO~K*nl~Ӯ7Io"f5|ۿ^(7]@0E0E0E0E0E0E0E0E0E0D֪n~v{:#% _ڿV>ا(cHireKksϬ1Ĉ5>*Ryz}ƫkRG0X%ǵQuK Wy.L@Wp܁feń׈aC0mݮoTݞƖ$%NuJs׷-v{"1Vt[zoO>: C-Ip;ZKk{UV-XR-&8v"C0OFyQ^| u{{Gi-Xq}^DZ nb~BخVeYgn@ ^_짞rc7Pm㺙DJ͵ HEO @"t~#pKd=1boI(#VTE^/L绸qT.- ap@IofO<{:_ Ckq1v– k&j5Z"V JϾŵ•KJuuyrdo}?sQpvZZykE'8 FiصjՃ2KWGV?{So; N{g`t-`ݮLou r6JSWr %JZ}ֶV LXQn~F08 ̭kәTY]z$t틧I}-6lVy흥ݞ`p0h-bDjˏM0tbV4znc;AU_m.WLF0ivTV創VU+WjU,Dc4.֋]S \zhhtjhmcnNڻ]թߌprDqݩ[#($"|#;xYs瞓ŎzROK:0i7/*_XͿޛ"G<gcVFVDje&(t2c~iri`6ͯ>ΜwUN&чtm~5vblGW pA>x2 g7¹+kNV>jId9`KYsO:u?]lllD{020(ܰ 2C |R`Y+JMdD~"91jK]}PFDI&:Ƙ7Y#N#)%rSO<˅t{,vOI;e(L>( O v{$vw 2QKw{v[d&3w_/w{v OIpSX+~`Rymgn  `px0RZozll" ǭU7;q} $=*?? >3nN ~#"bܨAv(5@&=zOWEvyB [x%X+ Hd~" M7T]_oE08$D6?p̱Dft$3~w+–$6[|HeIL% `nb(1k)]\` S1"6b+'% }z+ b b b b b b b b b b b b b b b=}ﭘ]B0QuݩoLkkUzXbi:5ve|׃hݚ¡ݪȊmKD@O! Q$jU_v{$jCqDXR0@#8GeL7ظK;5}͵wrDv8NILg ORP_XuaC0J 7*AnԹkXv5 mC0G1~`F*zvE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0;Gu{F0;Cɭp 1"b=Nr=p@ @b@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,zgXQ"殿,Q7 QKozA&VDqӘ\ k*6+7IDAT]ŵ"흝 G0PZODjv{{jYkz+`````````````;h6mg`;U8_NlioksK27ލ-|mo0p)e=2WFWd$"TzO׋a]TB`>1t7=E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F%IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-10.0.png000066400000000000000000000242561410275732300237230ustar00rootroot00000000000000PNG  IHDR T=iCCPsRGBc``<L y%EAN Q H 17`d`v D20\ ,aǣ,Z?H:b'A vyIA b'@39>@B:; Z dg`<!4a{;BVmbe;TZQwd(H,JK34-rH \wk10I 'Br6G pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/ IDATxۏ]}Zr/ÛD](YDN q)IT_0E (h-HFnjc[lZ%4Cs9sVH[s.{ZJd?y_Ott5]y8-aP+?~D~>                                                    Rۃ*D8}XT ִʉeQڊ1<5}ж`Wje acXOҝϩޠ%"åm6õ~ʅ7ÁUWD ?Έز E;I/ٓHh8$mzUou=3Q̅z7S[)R [j_3d_ZH@ gKvao$FΓ`/ԣ_r oĝ0ޯd6UiFv|<ҝdfI]GnD(qvcV;JcfysWDOR%D>7W3 5(GX6*VPm͊V*T+[?7H۫cpRO/CatvdLk-?\K"bo?H/pܫogOLxIVzq1,N+"+z*lM23ZoLeܕ|ѡ ow'_6,/] +N2ScF"cc!LyC/%R.BYM=8 &we'_f{tnrJMKtH~ݹFe4+Nrag25<;z}jCȹulnWJ߻8 4p3Z\RagxnsIcfXKfb%LKצ|W gz'yL=^,+ վsɓS=#аϹDD0s]?q\:Mm+v<߄7\@`W JDlwbWR&c^&l5uXߔXvh|`x~"gD$F?{'9ut YJ[&C{о`8T[p⒈4}Z1Jwڐ׵'-)Qz^RDk#Da_Xmd=䆽~s$w&bADl<dzq1"V}Ѯy~r;Db~kCcbU\,Ζ}|K+N,_5[W \_k%xLm +=a{`x8qKv2aK6*k+s%u9vy"SFDq*wl2u*^{kjt b1{@qix'2 0KaVJwRvN|3Qw9[ۂX#jnh,߯8X%yyu!?ӧ>^]` *H&;tŻ _bSkm^"h/5j:V9^8JhNϟPu+8`p\ϊYFiQ uluʻ"RK0m4c_Rk<㸾1A<1ˋnuۺ81ڊ!Br,_I}٥\uWn?K0mfYY_u+΄69?2JGsTs/^3&<^cֳJuQVDDkV[DD;ZH׫|]@+;~|!sş|J\O仅{~28 <3%rɃ_MU5-U+l,]"_>p7NLte #b`ao\҉[Lzbqi6:FFRO6" ǭl(Lw#'٥|.?5zgM+JwYDr)7|dŰUoNuV9s"pS?+^?fZĚxAQJ5O>{W~}C?H&crypgצ;W-ca3oN lĶd)[Z?wSpQbqb/[xZ,Usp@6~1Ɵxyh!}4t{i? &>Y`p'~}v|| S"' IՎF@ކ*ßy7Jr{S8Lff3vj|c;A0m,r64 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "}~P'} `}+"bUm;rG^gwWڽ+w>O^X7ָJ)+as|ޣ^v=-/ڞ ޘu>>1?M+p=Gxn[{1/MԾ|V)1Ċ8x*Kt;n곃5J#ٟ3+p8eQHt3JHHHHHHHHHHH Ƹex}-J՝wqs!XMڵk6 cт\kZs8H "bWD+%ʨxּxa"VAٗSh}àUZhmU:Z,Wk^KtvsOM/`h*IvZbٛ߸so#p{8eUh兽#SG&ɷOi(֨j9SXtյVJf  WoAhig;1X r(b8lQ֊kZm`A2Dj9#J)Qc:;?tZ GoIpY ^DJ(Gdap89g ǗJo?6[V֭;ɋE;޾ޘfiK ‡uN$\IC^熟ebp8DZyf^<3?տE;`G3X뤔px7;;yaVI~Z[RXRm gi}Qlg٨V+'+N,!J,ӎ#!Iȗ Vx ɘJkW>X< &+WkWD(=Y5{[ I1 V VF3"FDYk*|M%~ ]/8=6yGWEDja?:s+(-]3Fz5$/~7+p<2\~SDf}Ŀv?s.?|ڹu+W.p Nzhr+'2!8S遗&x ai[R+|j*#TrDf/1ՙ+6l28Dt KXe\JsЪZF½ ۜ%K#=ϧr9Ù+&xa{T74~,?{elOWrbPuV0&XmtW:=pd{`՛e}XԈK'y}xOx1(]6b]1%PTW&ydljc{%7[^l& `:]7 tv8[{ex?ӗ[2O.GOofzLwll+&lqkxm2OҮ0X#~,gXvk\ԕ+om_,2?Ƴk`sb+ٹG&$I]0ӷ$ܞːcX˅MMukS6k2O>,m,ӗMeF};}[exH*wjo ovo\jV +6$~csg9_^ps֞`#~"cD~cŞiX|~]U0X!0|E&975>0pnOs/~(pv= yD49y4~Fޚk6/7JeЮXVl<;IƆ_}#s|?Uk =a[qcH%([խ[6h@-it~k`tG>JV}=9rohE2+{5n0gחOO_=Wքޙ~٩'sa,{yXҷ_x"˅ Vw?u@ms0L6nVbSRWQ~ŐvIvgE_%heR(XJvDj*eʪ.{0`V)ӊSW_rܖcM,h?1@pU9((mRNET_Yԩ=.>z->H(݆ՒO>C^> /?V=`֨O.-_/=9C_1~#ZL`l>Xm]%:wvG|Y"­O{*&kUbD:PR֤ZZzϟW℅dX=94kƈs$;5v`pw߼ջv|mzܳ<7Q"SMR$S ˹@y+?{+gwK;l'z5GP`L<5Θ[O]aK1cz<ܜvϜj+r3\qvbxt*QJ]+2ksc2"ʹs/Iq)%5Y*V?דաGZQcmQVĊ"ZYeBmF`d_7 6N&ҭ֪qY]ylYI k+fZgG]}WGL7tc,_nr%=Xnhx.8}_)Q&嬮/~XY_Qَ/\[bNdJ-o_-L~w%l4t&SCQ N0\X1cN=#׾l#+wmUʵ6ld]]6sdᄿ[.FO:/D7Ggf#c~\vscd5)ֳ@Pw\;7SLON3߻pU%jR-eg޺՘W#_bf|w` F"UM7WXjj5o}}Lc+ykXx96_P. |wQybU9Ecڏ应px6YKrckn ԝ{EčmW5J6ݚ{zV]N,yJDZTk`?So$8n])jVNNFg^hݵ֢Zt#hJ9z~eb-Q*hmX\j'pqSQ\vC㳛3'nGͿ׃YX2cۓ,䳴0TFDqޏ=єfmkckSjimطL̫ujIϫ'pEDg^oԫ^5کׅ~6wo N˗PY:l+Щߍn:lX:־llEDfq㯽kQʸa=VfCP)lxK6ӉDNJ6bSs+׋d^OTvuܜSǏ[ eϼ?̤ƊjeQbSML0Q.(6G}cZ^qo?-Ⱦ tm6fcWDvTR7GERZQJ0pcs}tٚD9<-B(cAZXpcȊ a&7}˿ͭ n,\_xjqݟ\+/sR."r.MjkCR[ ZRqrh%ZŗSOW*j0B>RV.K[b=U&7'y!+XptYZ BckX+,k[-Kn<}PJ' G|ξk#O]V3$6(&lIЪM1/T՝Æ-F^Xօlua(*'+c/ג]bͮJ?0Vgu|]o¦S/˫`+aeh-~0s/6ws͎WIz+=+v0fs3_ZǛsņիݿ^گ`heQwܙ`_```````````````````````````````````` I_"]"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D"D62FIIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-11.0.png000066400000000000000000000411731410275732300237210ustar00rootroot00000000000000PNG  IHDR T=mzTXtRaw profile type exifxWQ& 9q$9~ 3;3'׆DTRϝ)s2>uNg\wߟ3n ( }aɰa-|È.\ppY6u9-^eA&V[˂R@)D #lvun[wc+k_`bW֎,AGNpƸgS|; a)0 k˦W1S%?t/K#oID4DC7dd ̚eO)˚l~ߵ_/D"AVD'o[[[VPubE'pƀ3 ׄSY^̈<5WIFҠ[e:9#" EQg!sc!n ( 16NYAtT709 :aU&f7qũ-KD&teV[8q*) Ծ;+ C9IRLłfN.Wr~{w_rLˆI8$<7 &\cӐIkU-m+r9  YqQO_sG!s%v1A>E~Ik >fwvsɌw^S50pT+~ocd3 R\cSZֻ. o]y `+4 butd}߈g T e]h1t#GQKGYXWZƶa} ' 6jezTXtRaw profile type iptcx=JA0 l9f̓J=e+DX7 9p9F=|'Ix{zY=JdO eaoOoZ:}+J 9A$~~1ҩyPhcYPQ?yZ= 9me4" B*J(BV)ڏ{H.\%0r,ݚ 7):^lcmv<WZ_3ZZ.[\OdH3,0p t5q pp({ݝ{hr6iTXtXML:com.adobe.xmp ~bSgAMA abKGDC pHYsE1tIMEɣ IDATxwp]}9C/$A(%ʒiɖ+vܒ8:N$Y'8ٝd&$;鱝udMq,+(Q&v @-gI,@{x8/=͟/F3m5QZ'G|K~*Гhpi `@0  N `@0  `@0`@0  ``@0  K"\`@0  ``@0  5{%N%baf+в& j5?6^=7U01aNSq!mW̐y08q9]t5]ɏJ~(" ؾC%̻ozq2h\!L&viˎDD)s$ 8q xpf7,Q)NDS|) FX⎿XyH**UQ*=}tnx$~ 3ϟzDu~Q}2WbIlt H8=Y-]m%?snIEvqϞ g0 :/}6*pȏܚǷ0ߵ֍gm4 _ &?6pWV*^ym/v) 3 b|'Q~[VzOĘ@UYV93ұ.b5"z fC1 '1k‘Jaۿ)-?`X$,w~Rfoܚػejv4(mo D}֍g:W/?& R8$TN,'*WfDHP+FbumR:{ vxS6v$h]"ʵVT&7 eugĎ%ō5Hq0# *oˉe:{繭1"Jicvc}ϝoz:U%5Pʜ7 %"ڇA)QTZDx.7^Tʼn9z?6&YgJV):U EˉֵfڵIJ~dW+ͭwv4ej 'p })^qP7&N~dTfi}DRiKhoZq*zA;*p#Uğ8T&3#~~t4,DR9qbkŇG_c JĈ*mK%\bN9yVׯJXNLNV;?J/i;_+IyfPDжKퟒXCr}tg|rPW%kr?dd뜛l7J~Tu9іQ>B5?Z5VyD}?:E,7.*IVʺ|wo # \-?~wM}t۲"a$8LZ =5{dn8:ci1a(~e^*s#2aw'#קwv9ğҴzrv$yj́-"D7^oꗽq~ZSSRڊ(e%E^mVd+%G\gzy>n\V7K6FҭQmsr©`XةMK$v$Hhe ?4MY;j٠{#{QzYxG,dG(1g},7!"bsr7hP0T"FxF2>]82fG3-;EwoXM4Fį{rmGe!DDvz>(LX"F JQkrfDEXd*)L엩OHũ#̑g&zl9Q z hmn},#]w}V*#ҶÛ-koֵ&\쳊B^LJ3&}(mЋ>l V=^7WuWScwT JRZHҊ$Zq,K΍%lTٰ xّIJbGuZ8%J~(ešRZKeuV8n+3/H_hOV=kH(ڵ # SkTZGD'kHS'MXF6mDnՆxCOL]Fls0\͘0: jJ~l.Oɏ얡mG{} ]IX"oh~ЯP!?sp~tOtӲ'e݃2_˲-_;6?ѰىyvOFĘ@&cC8}8,BƏJC[JwlL=k;fµ%*8/ NG^yvގg.ueGdŇw}ֵkdVJ7*-D`P"J -al!?s ~Jetɟru-~e""ίyOW#n>лdnUMi04З A(cZS=3ٴ~{{tZ1 *_LRc jE}ǯmHwlh;úk]\0Dx9)q+4RM4-?-+8:[;QL~d6Hq4^t"\Tik 4c } W+O*4xZm}wqy_1c\C$XN""J(~4#ډJםT-k_fGӖZw=7% ̍l'_V#SͫsTS}$*Q)Z|ИP) k> J[2u9Yq߯wMڎ(YrG\D)-J:ŔT }/Hmn#Qˉ*˶DNĘFhNYg[mLgDHW4v3! })f±+ʍFlurCQbD$0-T%\+(-_U^yn_/%FOݺ܉E8u Š5=˦LFM6WRN J*};""ʜ1r䩿|"ld_vrʯڹToۉB\Z pCza5@]ۭr9 FQ'tk[]#\k)m K=f'1k-ί(&Ľь󖃈 .`@0ι)@DDRR;.bS`3,N7g:6ޡ_X>3,1mGyۜx-lWLYY8])m9m`1&Drx'k'kũ}N,j;b9y=^?vMg/n(QJҴs'=6ÔW? $ݺV]%nbE)%ډ۱<7RS*!{[і7\L078`@0  `@0 `@0  `@0`@0  ``p-٢s,e>TJ,=3,5FҜ ڥa323J[ J'*AJ>wJzcuҴʳL^.zЯ/vq=w^?~_&<ghPAܹ ꬏EiQX",5&uu~bd`s؅Tf9&Vn{brD0  `@0  @0  `@0 `@0 |gGk¡_ЯȎo3$*&h-7}um Ęy+; D`0"\U]1W+JQZxxGCX:5e/zn'z;kA)%rc29ĔK(,7H5n2&]걶0^Z CcB ,Kx=dD \^`P"bF n Iy{A wT1 F _ Ep``3p}0uyd p#1^Ye-PJK   JZɟx~\V=Ӡ D!n`%&͏{5ռzY]ԉ3an`X8WZޗ-`81Y?:_lY+L\ݐ1e2u ڍ7"J.2 b@B*bBUZhEJDZI &~=3\?`#l0X/"bh8s<_mmPA С99-7L4.{~`8N~_ܔGwg&{Ǵ%.!^㸉\Z6,ȏOLVJZX4EsѶh>zvMqŇ{|`1&*^ynWQJ%"bB;\܆?ٮ6xZ.Ktu L p  d+ #gGOLYxU)'^-:xUI-ǤW,W bZ;_[]نCM&higS%5{8z,_}Z-Y5&^:IJ]n$#"Gnr(1ft\mw]W::KWk%?s_cz}eXȥo,[Z&P=ϯ\xbTwi^3 bĈZĂ]dܾg~qꅭR1[ C7Xҭ*"vnH~+0H`ҞZBV*T]m#c&J+WKW6=?vMQj:??uE:;=.{wsﺽްʪ#+{RfQP)-L;uh}N2kvuAP϶O\a1P)HpuŷU `Q?GW\*yAVum\:(&?Z?Be~̻?aJ hc^js?`WO' TgJ3%DX][tA~=xI.~gH/ѳǶ?aRo-+i2o?Y8+Ψ*;N`-mal K=~xe\RvOXdҎ&/ۅSɏ/>$V$^x\~hȁ= nxff`0B\X_.rD-gG 9nGo"Xo]FH괷@D+ɿh2 DIDATM; FÊ5{7b+͓;5dt궪ƄdӪѹc/]݄AM"=4W]H2a5 ׉ -f@DןgE,pC=D>t³oơSmNLaaُo0W'*sÓAdN.xw۷ʥZfb8Q~GKrUժ}Ǐ s ݻ,MO6{7xq["'ߌmգD2_;&g?Rw<Ցlˍ-7.bh-jᄁHkecgh݇QeqY}1J]ƨZϻHYo~趧j5U;+N藝+9WtZ jׯλ~%xeHۿ4y:o.Qsx7 ;j{Ҋ$[ҡ F1 c…0M%?ZX4x囿}'3l۾`nrrٯ6|h법O߷vӛyEkօg3tarĉ`<Ԑ;ҧ9*Vr|7v_H4yNjR~/Kг_1#G AXH, Mvf[ HnpJYbw*gFRͫ$[Xmʭtl]Wtmbt-"H9ћ6j;$mtÒMf^d9DhqvkSnN22;#܄ιKI꺎 m{~v%HÉOjUdoga\7,Kf:߲_~.e`}/QJh5zDdӿzXzp J7Ѡӭz-'17Q6#`:N>0ds_D?ij/{{W]&<(7{0XNgۊ$c~ieb? bD[ed؉eΟ0׊J2?3 Ѡe"mDv~M*& a 2N<ӭzhg*SJ@ 1Wy''3 IHyu&ռ:#"DL䡠<38(" 3psSZPRJ(!_!@0  `@0 `@0  `@0`@0  ``@0  ``@0  `@0  `@0  qUjOIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-2.0.png000066400000000000000000000125701410275732300236400ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1HIDATxsw}GeK$KlmG~$k$k;G^d[Xwx}]CVI ()0!-B:@$vLŽ>RH[h҄I0z|lϑf/{sb#淌}{"~wν>=T7x+j` A0`Yz탹p( /M_}ߛ `vibwbsoޘ|ks]43.ν1t3kKà ~7a{?0m^n07G _|['t}ՎKN_ w\L/b o XJί9SVh\*gcve|cz^]ZF~4-}SBbRCg,دYvCJxv~JZJ~ӡޫe5=Xi'n׆`N #m+ņ͕)7&%% {6$n*Iʫ?iHϫ-\+vOdS0 Zh˭ߕS-2ζ-с׶+j;i;yfr˓a$,qY޹7&ÂIk֥%Y.mK–ڽAvE,%xUZ^m񖺽-aT*8]q:V4Z)3-%|mmNՎջ7F֧֤ g4Fmȍ j=*ucmxПN~vyOFbrJHKFVYg ;%o?>gg/e[Um#bCw:*l)PYu^0.0o4Y?tMYABrd#AaѠpno ׬ ֥.Gsŝ]AGHJ) I)D6eԤmٝ]r8v2z,a cM%Yʻ2#c%U{nvԏBtUe9#%-G|$ V_>J~: Af y}VWdyIE*`"953HHL/oo^[>T{pYlB `\3qKmEdۉ܆[ry>?ejSOȩn.[vCvPy.ȯc`'TKl$-:(h ocq1ʥۖ&mPlQTq8 RY%Z1}nچ_n:K{0R2 IA3AjfaBvEoFd}3C>{yw'd9 &7o A1(lLk8_=`ǥW0N8Nν>Z [Vv0%$EN.?,j 2Kڂ AA#KO'n)_Wr$bܦ"a(t7_M o!W6a0+AbԬHzaHiHEѡZFF[Nxҫ3=3/G0} ~0,jY_SC~sy|;]j9mgwkⵙskį/IxCCA0}bK͞q4zCa~:trLtlw0fHx`nɠXk0f{ӟ,ϻyfzޘ|W(9;H۩]<|8{3=_>tJą`h8`ca㆚c4aUQj_4W\LiQi%볊/(h ~?ib`~...a(,O }Jl{ΥHH+<[VѡֱNt|)f?},G07$;+AN},P_cu8zsS{Q?3 Vڃzv~)G[#䷌}{⏽~`U @0 } Mȩ ޟҵ X[zca̢֌%#pkj8Vo03;ٶs/mʩ ?XpzXU S ˳ll᭹&S#uHڃ:̽>=T7xK0`` A0`  @0 ` @0  ` A0` @0 `` @0 ` @0 ` A0` ` {&w` 6]Mo;3ow?j`L뙿;SZnvN3[%ݗK/Z XrRP{0(j1`؋':s @0 J Sa0'dl 1ac9+>Nt|t<Ɗ3vF,.v"j ߙd8LvOrn_ ᳞҃޹'ChH A0`  @0 ` @0  ` A0` A0 ` `dom:™/i<(꩚T#gύEg'Jz2=ŠbPub e ` قcϝo:99%#uMJԤֆc1`5C՟N_ v{gUÕ`5C3fcw>|f::H'`{}2:t{n` @0 ` @0 ` A0` ` @0 ` @0  ` ?[0 Gx8/ǯ=[xky o  %MUFo60N_ܕ.;ϭuOn a{VpP=?4~)(|['ޝ Xؔ3 a4$ =~s% XO7u\zu^0'-&Wݓ$? ZN}Tf|XV4DNnlf՟|xhft]4 j7/AvE,)>yfkⵙ qʺK{7R̯Z(X~dlٻ qё[^ `?l ߞ$`È` @0 ` @0  ` A0` @0 `` @0 ` @0 ` @0 ` @0A0` A0 `  @0 ` @0 ` A0`  @0 ` @0X/X\\Dp#X 6w=ks5oM{KwW&;ޅ߿I⏮vOj sU7ƒ ?wyoJ0 7&>z;枇P[p pCڝ+ߙg~y[xcV0 ;f+w_jlɏ޹7'v\}9g;'g [&DZG*vͷW^qnQ{[?ɾwf#{ѻ$wɖ]N\&zWBtv0ʕ@0 ` .7Ɗ, %tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-3.0.png000066400000000000000000000371771410275732300236530ustar00rootroot00000000000000PNG  IHDR T= pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/ IDATxyWygwznufY,#  Ā$@BroHrs$g){2@ ( ۀ#,ٚǞǚalmI]=|?k~SV_RmxEvm DD{Gq`~J @SM4E`Д,qV(vM/=˷w*=p󞒈479 ["Z+%b$r[ A1wkV_qU6h#bR6z͚TҮJft5|`夣TZk|MŠS)Sc'ÓS':;>Rd|ܚKSF)emn)JMgΒ5ЊoDN[`o2]UklWo*ϫ8j+&3*+Z#≉mz9kDS(-bH2#.wJ.L(GEZof\Vp=;FWsHځ(hfLyaJKx&x6Пsݝ]mݹՉvՒJ0gzUqq45mwVN}`t_tŏnZ1}%qz-9^+#Zbg/62+Q:JO$zJN$LK'D)kEP5\$:ۧ"pQZ['TEab*\DZ㉯:O=4 Uh23D٧Ȏ;xtt콟wZh)f߹>nKGZfAdݩpuZl>^JV %:!b(Ү\%"Jۍ#Bt;3BljG/~m인$;Lw:XT5zśx؁NwlҎ8oZ=}L~ak$0ƆQhmPWjEW pTa#z%X=e ˍR\G)[sVΈr_9wtyfr~۷;wDDv{fYˊH#ڄrY`8ӥ@,e`ھs۝~#;ޘe։Z'L: J8Oݻ?H?lB+s}f lےT2}_Wcѵ;'LuSJq8Q{&W_<83xtH8IkVJZ!y:W:D:mLJz Z\GTº:7^7}tae~KnTvYkJZ|Ry_l[]'D#y}_JՀD(W'իr2sr7_97>Ѩȑ'ୟKXJC%]֖/KURrJL#T<Ⱥy3DJGz+b#vPu'RZdmoBi x"g 'L{EykgϾ qs\gmhWI\'5=+ACbx4Ѩݫ6%mkSvRED8Q;>wjYV.:ۿ|tzޕJ[E[J$-x쟫 D@lضm0cMD$q/v|6QJR1 R qt:P?sobz?P)y-SɌۛHJVꩧxy&GmO_M]}$lȌ5Rs2y'=MS"a QdO򔾳25~ίTKV]'܍W?LL虉ayv R/<ƈzy.[{ykV#G@Mɔse"%zU&iԥZO4jr*6iG˳XXMJ>w$k߻Z-ҫ##~P:ۦrJ+1Du\I>g `dOWzWZyVb(k$6#1Fq 墝 >7rT}ex]Z'0]K{G!gu=˼)%≈Pik}yY+Vx0ns>m҈c1&VZO)E5R:Q/ELUmc_⠘M'l`^1̱:/xEdFޟɴ駚ĊlOv3CcEIR։BU4T\O']U)?yZJh9f9V*9-]{/J08xJtJ->9D%*{'86?3n6j]IxOf{MzXP /gZ>Qde#Igԕ&B26'xm։#ڟw).*>?xK_W9. m0x8_ƻZ] 7/_WֲV$ W[] { oO EkTe,g&Oju-,N XsH-7H\컯ݟѱVbA`WkH\'e$c$wj0}hr%O˽Q0w|Gņ`}zwF72ZkTd1Eg`mMv'"Q~KZʬTk;:{׾0像/L80$ ҰFxu8t?[3 @с &_O)/h8 ZKB;⊈iDZr<:bXlZK}o|n {MI?ohDٜr쑗ӭqN>#&`t`lHG{D EĴF*mhӝNwE/l}2+:{ 'VDS3#r˴z,iӣ/𖃭,.Mz+Z&[]bGq=h؊[|jGR:yX}3VB䶺g`edq"_YH;Jϱh\.ND?N[dzŲ*M ,&w҆{8zVm6ViEOËP"JRYUS?SNE,6*ĝ fyƈđT8cl#ZѢN0u{:]^ճ>eX` `IH]NN}ptYz O0F$ٱjUSGSш/JK睕^13ǟ~ym9uMb~ҵju196BC`֯6u3ណ^-V5)L_z7ٵrzgfw^L4_$,<% Xv֬_,6w_oiu9,U0n#}# UG_L|˚?Jܿo߾w`;&W7gܫrNvrZYJネVRVpS7|45h)¸Z޽]c` Sq:n6LKQzʱόBD{E$G&%\G)„}fv~w`Qu;PFT S񔵲df0ZX. puSiٚp&RNg"U u[B H0#Onu-,Kz'`X']:htƕwW3Lb*Mugs&ezR %RD2YZKX o_;|_}so噠'FF-}e>UqM:fIiugJH*5]lu-,', Ǻ7}2}|#5I0TwR25\{}OV{LlA`c;ɸ'N8ѭ5Y: [ m;{o7yJNnsA)U*L*veQ֋gD>۩GS;<5;ܸZ*mϽ>5a؝O9Q-vwկń` I$2Wj4695y0ѱY9ʸ^ZvA&/X58+Bgrӕkۺe<ՎrDD86 ߮԰Xi:8Vǜ8k`1!0KH*RA]LJzֹ^ЉSL$Mb FOƷUJiu],v` ڳgOg4н/"yJNv4֤6o`Z0FRُg&scVL=*̈́[r&m}ζ/9Ε ř`4L*R"Au[NT醙EX$)*%A'MNU+jhz$:8vhjXqYvi`)!0Kت-r=]j\wI9]PY|ILOc=Am0'w`Q!0Kԛv^w |z1^XqǣPLyEg2h )pvJ R+؇*S=&4/0 Ֆ՛yuCGۭQT6DZbJcf{7D*E;=5}4|vuoV ݤtydeU| k] k|J-Dũƭ{{$t 0'La0~pz8jlFD8OX+BsX39qd{í4f%*Nd1SJ֏B'PZL޴;Z;2`8q ki}f~tQ83` LN|m=_%\zoo)Rp'OtϴIg[Өڑ{VOV8#`ꓩg<_wuykա%֊VQFOSѓMh=~3"B:̕}kopy.oJ$= Ւ351ھ76j`6fd!Y'd_~ϻT7"*%ĝ`@W[L|_cOVJ=Cņ%I7>>L vnM&3Q,Q:D&Sq}ef&'(l>h̪3TD(,="0K*δM<ThT:h3~:kyeU&&dl  Tpz!eϫgjTu\VRgfhr٬KoO\q4h=~BDDt*blZ,H?Y)6Ұ>eRjW+*$ X&2T81:<3Z/HlgRQLJ/InjK XF;S#*uWHN^需1bkgTGK3cV_]`fjqՌRʜ"D*%U:qh}3/;ШT ,M0ˌV)'zʻOQLƱ5gJ; +0ϮH,a`ڪyGz)5/}Z)EN4e%I2U0xO}E&w>{8H+qWm(ũ1,G`"0˘#^{`jݦ#^V;']=3iL)lTr&jk#H5 ec7TT130xI"VW(TaG' fX DXkM;.-58}xaf%k{* j6W*l:KiV[+~2 KeHKmo8]J5UC`mp]pS*544*E}fX ^V$MvZ!/DF% ,') "0h) "0h) "0h) "0h) "0h) "0h) "0hmuB[)'ԁ[nB`5oϮ63}CS]wnuM`i!0A)wIzC`"q"͊H".I"0h) "0h) "0h) "0h) "0hiB2o곗/vRJ2`źMǮzmoXg})KB` 4Sql(%ɴK\Eh/,2w7~sjTz=Ռ)ջ2myixQ0о]ӟgS˽VDLo4f)k#^M MnVڪ = ,j`3n{ǃr WG~o]WHkWkǤ]V(W0ih 0EW~pC/N}W\ZMdJ?~֢Rdf\N k yq:}б|I5muӮ_II=!֨^UfVL+eqU ,Qw~S?JSg/8# ƆRFqN3A o X,aYZ{~"H|I6thǞdvgz}{кc}]z\dDgj+so`IK%lMw6myӿBJgjz<=beyMQZԪ#4vmz_ B8jk(mKXaw(\bwe:kz;+z_"))EEcmz~s+&.ҽbpCO`.Ք8g~v3 ,j0˂dsVډԋz֫d*hϵWzJi6Hd5ݣ՛O:'Foh)ڞw0~q`&3L.1nRDI2%[^u~"Ogv􌣵JIl6e;N'Lmh?^ՑV*Rֺ6-˘X 2#8߽=wsCkq';/B[3\o4VӹJz\N+y RqF6X;cv E,}=;r5Qs;nDx'<[k9Pҧ]M#?RdZJ֊_sbjbtCCǷ<4>y(}`AX~C_nr&o/mhZ%`ǎ uڐHi<'+-*^_HȦImO۳ڵˈ3,p0Kkclnkkðzi[:qij}מk'  3 W)T3jC>weds&6h#"R?)L{ZTx ؽX|t~- $ju-JxKͫjuM%/|o-ӣvt X+%3*"V#0K k%ou:)j'Z;qolu-9z%nNTF Ӕg0f%.8AGbQ`kͱ*ĕL0ѻs2q/zDDW|Osg1,qjS{+ÕB0j]GuNnju-1,qǺ9k{Weu„y`j,:O'hHuj욜W~=>83 isGz㩔Ӷu.5:jVlfg}d퟼{h~F]H$DoZ?ۮIƈ-͘'y+c{]o$=i߽kL0;hzPFl+w[gD0 s!q<**r!9 o;;5$`A-đ檏!h8'Fc؉c~!6Y`"0̫{:5WI'9Wa?}+N66jfKef+:.urǙm(X-ֵ""ڲ3XF6js.^Ls:c(2"ǒ$`=^zV:9[$"gtY)BX[>79?M)|dRl)h`.%z{+?3 OV8rQ ~40 vصf~G{%!=1*Ξ㮪V4< ,a}E6WXVjfJ́%L[+,ZA-NM85A`׫R3Fd>X;6퐈XnQc}dF.ğ1q6ac?1!0K[Ⱦ޽Η;!7z q$a'xn0X,?{_~ rWJ`yR`Ϟ V`X.vXЛyDZf{$kTJ'yŲ*KX&n\\xg[)a%I<}ض-=nu[7eWL?91vɉ9xvB0dǟ¾}zxš;?}A {vlj<āo{k5lo?m]ί'3Y^dbKɕqG%̃oޣ_2X3PO^mkGOA]9#opV:oMժY VD$hG*x聗?oT| 0 TeSƞxJD{ov=qS˄mzNkCwrH|-WG;V藻$%,XQVQ 963eXk8 ԗ}t 8]W?E~ByϽ6W_S7soq3|1/1oNneH ig[>o[ <[%m/mXU'Nlx^řcqU{zO$atXxfMo|/Y}[OJL2Վrں傶n}A%nw7޿|4YmǶK9~&*%hZa}9uC&ʄ""grD`fYlwqM2vЯe'7}~_w? _f p^:5bUgf;MXرbY~oݠBdzbg10#̤v\7+O>^:iYֿ9sIz6s&Ϫ񣬟V(X2 l)zņ拾>Jʵ5Ki)m(* $b[/OYؗ#ZEfWJ$ ramR0Z)m ]U[/̒z k֫&|[ jp"V[3%%̒1z$hƭm=lRӨ`fȺ1%?U)8?er%Y#\tF^Z+Ҩӏ}vYg̢D+ۨqkX{GṔ 4v"/i{G9>qfɎ7rm"-ٹ)I)Q+ѓmvOOZJZtbGƢpsSSS%+xWfr:=gAnRk.xY ?֍U:i%; GƏ~/3."Ie,`K&:DCmK{?ίo9Ј[]ٻ7*rA0 6^}kb ehmj9e?I50aѯ;=6yO"% ?oMV:Џ~Q>3?#H׾BK]:ˑM;uɖw $(r^\fjI;Y,ƈTKG+#96X^ 9cA8~KD(8۱Z){`_ol = ї_ b>=)1uRHƦhkN5?w,W\ $3]];mC+pA`[>23O|4/ge<D`U[RS2+%H;FIJܟsޡW&R%g(Qu/dmv*874=giիRJiɞ ֊ vQE|c%$^3 YH+<ߺra ߊ&:{앎6Yk bUl3B`Ԑ 2ճyXqOO|oY^0"rgjt2JI#YWur*;}xh/?6=7=p~ ouݳh7PJ֤Y\:{yo~g5R)bEYR"O7wď&/HE`Gf%]g@B}zn=DX ۪g{qq@ R"999_>; `!#0gD&61gvn[IMuV:trx) ƈRoU:+V6F_A;ꋡg']%"Ҷ%I/%DzDžhBԉ1Qq*Iy7&J'#g~%@~YˑbqkݧۻqnVf1=GseH{HW3,ѫ3& DVlNrP<\n鰻k PĴ/hiS-KB+2-=?3&SFEWIUjv/%ϊLf`9itnIu%±D+QtYt7{^0 @[@UUQTEaP@UUQT7ȇt(RIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-3.5.png000066400000000000000000000022301410275732300236360ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<)PLTEh@xI}L}L|KwHkAha=}L`XCnIr];O`@lFA=,+/W31tG|K|K{KvHkA|KQRRRQMiExLPSOP>vINUOsI~OQV3mT9*8R_뤵jÍC/9Up`p 0Mֵo}]d^{$vºJt ߛt3(rs#QX͏|YGCq>tjg=;Fs,N|ࠃFQxψHx]/0 @1妬r 7Wj1R3%f:q\W H;^¸:ab|M<6ņ"9FےwuffEZG}&cݞ-ntp㦓q3mj~y>+gT<^T"ēl0V>ZFUr)cS5z14Y_={;#;tGZiX܉1,{Qic‹"?Ddd #,!0M&rLȠH~X*V&+s'̲\]{)l!0MÚi-W&Ǘ~ N<9|`vovT6UIVk\O<gwz[rL̋{v$i[{(\Obzȥge%Lܥ$>\Ίȳ"Bh# :9rQʗ ߻dds A`kJf"ȋi$8(%H1v'?Wh\;WƦ˓O{z|dv(oz}}މ" e *sQ4?kCɧ_"{9cJ\6YqÁőHӱd<ն'[]q@4$ |tw= "^k7p"_W'u4j[]1KXWG Z<oum`k#07G7.󊕥srS`{9jh` E†j_ZXY.N_u^go{l[<[QRܶ#LTP.Jm.륂gZ])z q6չ+%klnʪr{cG"DĶV4YFQkfCӨm]7nu hvӉQkQsťC~0+s.h @}`x9HDk-yg(QP֯Y9{1+;/&I{' E%kkFyySqDŕm~8x{wȜ0% \%DSfY(J$pjbZ+b=PڳӥWѻxBX@`H{֋'|mX7Me0F/mۇ3w{аvjW>(sBJg+LǨ﷥kL*8ӝN&rcMWNȘU"0MT]ucgnQ'*y'5FdG5za.p"0MV+?~gP>^[dn:\Q\Q-:Ni\(.u 0M1vu}WU9/^ܐ%ƩJMZ9).rue(rl*lb'սz>J9X, L,8] ]guy$dj3gʳ~d:qu,^ #0/:(keN*w5fA`Ze\ PJuHD./cg0Ԩ=: oVw=p _uv(ޗ`y~l&.U"0u^Ϟ(*%~C68V;eG&ߵ FWw(̈eXIX2g +3Z ` @iU⭮. Z/$K3Y{ᑏu;{)(cm\-`]]a,թ8zE)]eaWIa9>4{Sr{Yt<\wX#N,im{L2p 0MbjENUKgVo/}'J#Q27sڐ]܌DǨbT{ ց46ڎwP}r̻ON;ڳxkT˗_gz-uE ` @Ywndl/NM)6X眈r"׻Q@f͈45Xh#SW5 e:to<6>{4kM4+Y[|.?,e+Z[3;o}E/ɮ4=e6p h>#33ŷ:mscFOM2Mf8U\ Cot]_s[̈́'El{O缘qGNsGTӒULsF`Z#GLWfx퉔d4%͂P2իZOJb`n?Xl9DuV貉3P<ƬmxZD_[òRbW}4J0-mmHiQZI='!+!(h)UZK NvtlTXa.>٨aKTXB EDW;*Q76TܦaZ}ɴO~EiG9|/]4jRB׷6z5"0ɡO޳=ĉozh vwJùNjvD2z{Z5\WWK#Jٟ= @<~ѥ'yg,"9TJ6!o 'm8wOw侥'굎Bqy׬8Ƙtj˦l @is>p:je{_+.Ev<θƓҫ)88;˷  4XԖo=4`Z,y @ h_[qq2yk""J$Iu~?*D)O왻;e[Dҁ{C`ݓH>֔#hD+%񤤾]XR7FlcsөSS\q:{+m2LMMA3d;&3@<WbW0VQ 8umٶ;ڼXQw^/>V;IokVJ°M`= @s7{;quO AîHE0(N֟oo'MNkqDh-N-Igk|q ŕꍍJ.$bJl>yiNi5V"0->îΫ(5Nabtdmxp٣ʴȣ<GH>*Z`PDQL>^s~9#ak7 ,]ϻq8aq0F}yS3g/^j7> \;U,(nXRZčLDF¯rc+ӏ?5s[]/yM 㷿wWfn/"RbQP]9gK\ [b;;ܘ;0h4j]%(eȖg,,dRˣTs/{|amNH"`Z4=Z78Z,|Wg3χӣO7;k3pvKy:Q16$s$Sr4Fn9:j%'v^<)J\ڞkxZţKhˏ쏧O8nɬsvQ"H:FQ8s\㶚/KJ]w2Uk]o<#>M`T۽][K;ՑQ.t⋙0Ja CJDr -quVA-_-;6}'X$e?Z`xM.zTYoioRޱ9s}_{^>{ų''#^P\jkuXQG\]Y'zI"ڨքqh+$ldUdIms$/*D ߭3ZyQ| rmKC۶t1Iozn`{e R QUUuwU٩vAǪdyq^ @uF`˞~D¹'TRsjb?!NgV)?Qߑok_Bx*Fj^krZľul&;ũض} Nbڇvzo|ߩ*m,d/.W;+&LX{),\tgM?Z*v{|[Wi֢ s/:vNAWUY׊},NZ4*D)Ŕu@R؉<7u焉Rꪧ4h ""ZU\3s\2Sh[.źVkXlF1⇹̅EDZ!0׍moUwy ue(lIk"0X @)ҿ,5`Mk"0X @Fi+bZ] U#0X D`."p'k"0X(RF 5K͊4R}kugh0ta#fD`K(e|f ckWkE@!0יJQ6ynߑ(Q]Z) D(c*V1 lV%hGDeXV `4 `K"0Mز D`&5 l=<X D`H IDAT&5`Mk"0Xh2|`= D`&dJ嶺` sJbMw'{ɄzWʱ~ڥP*B'b كv VM*kLytȩJqۊVQiZ!.-%ۺd6n/}}CwM[zsQkĘK_E1JH,1:" 0c{ںw=xbi||~G\J}Xع`t9:~͞X{ze_OWVuVV15704vO,&W㣙oWS+Z["fB`zN#jS(#JOqtL3""Mbcm&)Z%"~)k0jѶv77X"DD4#` AuE_BjR "ZZyxYk"e kTX:WlJ: !X$"Xm7OJk]=v>1;FDY1"JiG)/Lsgb\o8:KXzaj6p-ê+Qr#GD"mtsXkD~nݕqgu3_Oi72~z}ho9/ҺZJ!VY?; u|0ʑ#ZoN?Dd3$gsQD.@B! JJ$+`،z{ӽ=۶}瞮nb}*# JUxyd$Tm6P>ߗ#g]=w9ػb1;h`a6G=DVҺJY3njZkC%(Q*^9Nip &tU[06|kD%R1ݿpOiܧ8քZ.eI$tz0ݱ3iu̕pͭ"؄GOG?33Qٶ3:J}kņY5/>刈#"j`P2PkkU:G`6XtK"J׭_OgW>#"Fy䣙U^Y9/} ? Wԧ΍{ήdVoWb?O:wz1xwSXDFrC;s|`G'ܝLxB}w" :ZcP],{xOŲ@9/( ܘ{(TyW<#w-q}򐷁= @}Wh4ɧeʗG_%0""Kӵ? x}*~%TJT2'˂4 /tܴ 7~#Xҍ"JIҋ5d~韚:Qu\Y`ZT6=Fœ̳;zG7Mg`oȇ̿>Qbt")~K+}>{ྞe{SdH︢#nKZj‚_=qWn64=h@FA[s[OJV⺞J)|hؿwG>se۝ʸ{O㊣$/DZyӱco.nU S{o#xBw7zTVW2ohkTFiմQX\C"2*{&$1Fb^LqzZ8pcKl3Â"tu>{{3n\LI6n$RZGHiQKm|ܓJ l-`M<;Q=nL} +^񨙔]DB4G/^ Z]:l0홤vijׅR"3DL @)G;bqM螞Z]Z G!ۣݖ/|%$O~WP[ @Fwl ""-zGյ} ms`x#!E//fZ]Z y辜[ ҿD,_z)I%e=Z^cHc_~յ} 211arz31cqluMDDq^zO 4qd䇆.=>อǴڽjĻfzFswermڡZdvEH]G^DĴ"4gOU|k 7x:{\ *8.x^ZQhA)F]f.SUbJ$'|">'nHը. w `k#0M4Թ};Ne]ZQIڋPG.yF7͒`k`JdYֶlu"%"JSҏ-n[ ;=78+"gu{ÿe4*E[+,>[] {cSǧ}:l* *l7DI%Ak堈HSK筪 l`D>uh9Op<)yk[\gѓϭڊV@`6X"v&ާJmYqD?Ͷ l?z~yaj\aADDU lJ`/_W“h$ZG``][c oڄ+%ٶV6?*G2m_0 ~LheMB+Z][)WeJοɬp"%E"ZxlXTk[# +Vvu'Jųl 0PWc3W-V Kٙ1?zֱ~nO'^Ei)mu-J ̟Bw.xk[ # }m-JDZWҒccX [@T|D2-V6=+%Ҩٙѧ??\*[ ?=dmV?;5㏟Kt'Ƙz+Jx| )ItFEd_W.^/93nB8KVg^IheQ.,#w^\^?~F͖+蛧8ꆞܴa W:ڀ%D56jKF姒b&Q+%* oxa>c=W(K-'3Xmwm{D6.p"0&<,l,^Hu\OmGqUmҵVN"/m҈SXGgօgTe%k*dNNJ_j OmLow{lֳ}ذVyBy%cڔբW]dz`t-9FX7ʹ EUĮvz[TÊ"9u~4ӿ卨:r$i;nܹٗck1Q-^I2^2gJi7s_=)#Onı>v߶}O򽩌`h,6}#X<|}=yc61"DV{(^]CA`MH(c^Q};;k*Ϝ\D6ZGŢ!DRWsy1$cD4mJ4\!'?OJBD$$,s^::T_,/)p+f):t*8_DD)&奋o|382Q^}7%i KM]  s~7?G{Ek7VU{5ym^z${[, p5 36/x_TZ<ϓuۙ{Ϯ]}"Ar66j6ŊX+Ť=;C=̑kdez;cb4 Rp]gQY(4`F'9q_m\_C37u־Qhu(=%ɀ Eo^b#<[ޮ*ӍӄtI'?3S `RR1uV;.g2noK^~B"#]ɘ+E>OH[I:Etk9DJg [+_<;Rs Rzے+.dEKLq/ 0j^lZA4|7;3"ŲnIqa&p`x8 `\Zn^ xSN.Vq7 }7L҄uacUnOKKK- ]w?V5{ETvƍ^VLOWH+en_lQ+=( Nin $< sbXdNFd5f[~{)fN4+?+e0aeisR!0NmoNa"˗SvM#XpQ[ ‚!NJsl'n69`jUz2sftw'e}-_NJyş/ռA5Ɲy;?L{ AB`>9Qzl~6df{Bpn=hq;  `#)W,[7Le<-DDqL|یnU}~Ջ{Llsq&$ޙ xc3Wč̯v~yWdb~bf!,TǷ f#{HLp:쩪 }zͭ?B8 O\lu63*OKOdN""n\YKS2Qk#(V:A``E+KLU^zj)#F/ajǬĘFY"K=!cDs]gA~J0P_'"F0s䩓Ok p$ 0 su/LQXȘJ#r+gz`ág=dzf#&D6M}%\&_G1t`_*_TY*'l)oʹw3?>[F` !0aT(+ik+Vt5_Gc_i8SL1B[~ܠ^jS;Cfj =H4\v0= OfB☽녁i:fG3#dZP1"FJ ?b|W;͘^v\L-n5vmv{MC(a4jLp"OsJJٸ/+ŒN^[vWgJNK$S㓺q0Z3[^7Z6(kB}bdknma嘙Z ͕neb.yztxPiKsӿR2?+i`)+!pi,oZt/+F3"(v!b *w^>nO{XMȄ Z;QK3itti.<Ϲ8"Ÿe,ڠѫCJHa 0Zz F2g9Ɍ1T[-V=D6mji3EMBUR898Z$ `Λew7ʄ3K\k=X([ Hs[a1W1DD7ݍWb}0QyA { h@`…D*-8Cl|(]<+r*}2n󻎻+h۬M[NiFMOB;˕b_r2{} SPZj~+lF|sL-P #aP4f麙`iN0DLI]8>^}BeHR_*'Ot[AmmXTPJ2#" so`O `ߗ{D{o9w+Vi+) 1%q)c3aGpt 096D>sNp`#! t MXG !0@ 0 :IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-4.5.png000066400000000000000000000054071410275732300236500ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1 IDATx{l_ ^dt8Ȧ:T@bO=yCDA;.-+$t:L' R@.--EEl.s&JLI9sa/8"\u%DŽ+Ô_ UG<0VxDɏ^1G˚w/۝mpx^ޒ{yw^˜:p֚+Ǘw)yv|tf(}>{hisNrCON8쨨,LzG yK',5`c avS, M~f<Ieذx]XU>{G zOEe`EOն_ؔORGQԻ-h-:DJqZr1G6)>P"L?3zuO&kМL?ڥ ͜iU _UoQAw?Dboekwo/ZuOGs,m5Y!:0: AH|loH~E;^QߞrscQiHvO/?68BK É Zg6t&?? WjvŷߐW2gmv Cv}M6ʚkv73Ri"}5KGZ|~&I6^|tyK^A]{C\NQߞ|rS~Y( V0+¼ w.~P_e(ɯϙ8)v@Ysm7t5Iuo°'9lcS$@Q.컶,^TMEՋ j[zN򿦫 Զ%{!tG ?V N}?o wWì5U۝[]{h~߸'- ߙ.;scN2#Ma^gyЀ'!93b e?#}DT}! y_ZpNն% |kv3suo<+jkׇGrSXڵǝU_韶}%I~h2N*??MpvÀO w>;֯rCCGEkf<9d²Q nnY>]Ջ>koFE]x~;:~KT\К'33qi]*L8ܜ2#ơ?0Է'/ߐW1Cnjk)b^VwssWiO GKW`^}G]zU]9]zm+Lcjv%´顨"lU9%/Yۖxe,K%l'xW8-cP(kIVXЙvf7K YMu퉽- ն%:oȻcֿE1kv_\h][ JJ>.]"$諦Hs̜59w}ozhLd}UFl9BWOP)?Z $x`0^$% F%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-5.0.png000066400000000000000000000535211410275732300236440ustar00rootroot00000000000000PNG  IHDR T= pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/ IDATxye}'W[}iI,Km 홌8$$DHg -KE޷U}9'ldM޻܋*~9cp~liWDwΆ ߹=9ޅ77 l!0cppQx0o;C)Z[H}KZ$%L(KLE&PP" 1D8'ٺe%ڥVT3|gz֮NH˸ tO?;IA`J4qvXB['wNEqtKuZ ՙb%QmdBmdn/UOXyvvQWpJE_nƑ6t9nGҨhux?/u;zf˖3BG?,^&L`iӳv0J!4M=\2*-J%$ɠ'RlOX6D Dyv8 9ڐX&1 G9rD %qāv;yYbųE8U!MtÝA5">[&p|_}(+ fVE/'gu]%)!C"&2¶ɾz鶭g7ˣN&VƓ&-[g,i,5"?8+2"/3bk_}xxw`{G'vox{_v/Wka>&N(--spJZd3!"Ҽ+ `hFPmXvh3ӻǙ.9ÓX+82~C#IJIj9B134[&GZ˨Ys,drd;"11߁o1DFb(u]'[WMb m@`a;b&kS{&)]f6WR&gCZiՌޑpp ɐ!ocH!c (S#A}f5Jc5yQU ~x``8.I"ɂ\sm`"f6HHp2M!X62&8`&^G7N:OZUj.1sۊ ?=e:F?'A`t)V)x]Y s\s=` J)ND6"le>8L~8K껋t*ܓ``u4E Ctw.:2Dͺ\ FL,.&E+E*U)<,G%rHW]6ŕ ?_=@`m>MZkVDa&FYIf"Y#8+Sϱftl'z*| 2&fTVmъnK4V67cw 6$cDiy% (˲ ]fjݒN!2. ڇ6fYHc#m֊gVv2w>X^ߞ%(6c\'{L?\v`is $"XK,v\햆zI+)q/wR2)I,B˲,q\7%1GՕٵNVH)K#hYNtjLl Uh_jk͚bI]O-w"2I02Mr/ fԷ:nfr) uDDVq~}K}K0>2ssm+f6VCaDT$M& E? D[F KۖH([Yqf#ʫ_²Im1RDFjm ʂlhe~LVoT' 5)3LR*m7zYFvyaq}m `4 "wtј % mT\W{/l2斩o1ƐJ)qzT"CM-Զ(Z#AĚ4qm)7V,Gv٪nlgvl̦JSmnKI~ۮq.HHf&4D%fd.T԰JFYuNR)iO$qPFAs#Mz\[ٸ|%Z?ٽC`!X29(_V&f|kY,-d~&  tjv[OJK qۈ[%qBuR: [+?7Քһp[Jedfː+$,71C5+2NZZv"0DҤ+zKlwݸ6  -&"Æqcmt6*,͍~MnxUĂl6fR^BY|8,k՗5&'q_-݁cx<-yYv3 Ik o<Laߠ1~T[;|--0A'dcIy~svytewd#?ȹ 7g5^9A`Q_1-rGa;A^JUFlZbdgtNIF6Z8*C*"A{W:!IG}[wm{G棠8S v!kÓzCIʏMa!kd[69DkͰﶲ֜ 4/u*2jf˘TI+,K骔ځvK$ (~)dޝpg!0ma\+!ʗhff"6ĔXY^w+BemCsF[ﻄHmdqZ؅Lи4/?ThV :KMb-)®IMpI><y-(64vpЫlX_ZTxdvN.w@bΜ  ]G{ol*z/2¸`ȰFOucKvh64)|?&G3*鱧"NnA`1`k_̕Fϛ^׭ntOg"N[,潊`&A,,z&y%59Pmo2w3l3f``Dcj^.K3+V3rgW+VAϩzcuյƣ6ؽF``y.ԋ}\N%q!HiwlZJ' mMRL{C`'DP_S-20 J4TYbMDLV6!`B`hL~3O4Ahuhd~}r6WյU>l 00 o䊴W7c:^[9F I!$HˣK%IG=FG2Z_1FiXg-;L"ۤ1"%Ҵȩsxp=m9I^ ZVD,%YN^״U8}Q[)A6o!\  K2xY7ap3d32.3hgrWJNSR~"b"CENW|W4MR(x'DO0 KU=Ʌ2٤dHZ$5 oo|u+lۡb-ac+5VώL-ΗRgՙ3 >ŀ[|w $HD9!{' XUvǂb\I&%LBVj>(0``Lbe8lr' ARV2Ra!RaLkUk9)uݨ7s~12a(a7 ]p}*K)#]O-Dd. q{CDĶC63SɦC}C/4lK 00TJJklĐ0ɐ1"aa,:^]kT˗*l4c,+pCdYdgNbHM\^WJ$(f+&uP(_yK[<EYӔ="N"iMJk)LNeJ&rj3?{Ui2iLd;lKfِ6mnEՓ\39!҉_<{'q4DvtffQUi镠_^':{2KƎALmզ/cn6ٍ W\C'O^~Έ~~m˗m;Fc׊ 7癵mI!q(h_<}2J^|nb""!uơW7Dd iI Ax.q!g__*ş<'G46٭xCKu eW\Zt\3#lT˯/]B9OiI.̃|I6&[0k~2R},)z\ԛӶBޠ[?G$V6מZ$vm=9B~V7ϵGDtn4`-_g%3+ ټ*_UG,9oh "z ׽Ek6 쩝ٱBsVHc)etmzg,K7r3y/>gaټoO}婯_ND$ ??t$ᾱ=MLO#0O?K &sv&zJV\Ibݜ\kw$F7,\l2jnw?19S}Q! 11pxz=,2uHDEuHyRѓx|ν޹L+!7__2' ٭;K~ C`~+G|,NܐlqF4hRQޕoК&I$fsRq϶R߬S0Ĕ~, # iXWo𙥋׌2ٰE?\>q"x.2$lk]_; KiJRNn:Ir\Z^f9?8;@eLq2=_.^ٳB?ldlGey<"ɛ&{Ǟ>%ㄚ&`ۚ~"L3W[ U{.Yם4ZJ#s9k. F'mt[niHܛrpuҵa&!];2!,ۖ{㳙L al19c=cf..imyfuJjɍ\o%g._t=s f&Ʀ]?B(]j^nO>yF_l̩Mb&*oX ;'l3G^-olZXjmU:۷ǧ{d軻J_n `@`^qbޕɝ>z4RFBxy|dr(Z+k$3{䮋O67 Ο̷`݋r}+P;v YZ+fa\\:f3|UR|҃VXiB#Bl[7F p/z}$74=>:}ivbocu84L6ldV:9з7jXˍ2z&諺3f0`8A_Z^jy*0w[zl<=ce 3OlgiY8:=B{c^ze!nf#Cd\5Yk7呅Cǿ׮gYdNggmt2#cDOg0!r=wKg-6?;3}f*3c`°ZDbg}uǥpOs;gc|%莭GXO CD4Q`鴧jAZd[)2 "b2!Z:tZEC#%BtPB_w a]3M1 IDAT~Vv X4':B0+ff{3?j7+j,x^=ƥ^cD0G.ov/A/(Չ Yr^:?3VdUn|#WsVqf﹧ p `C`mAe}ieʖk2kIur0LFC5Nض狖/q0ȲW) iGW'~x'Oۮmi7_mMi,\DX0afHҧePk?81qZi#EG;+'VP,I Yz|zeH DD;G;"jߍs,0=-Kb q%_lVFj&v=?K}NTԂLmktq`! 'z̆rgv=g'wZfMĻ<299979;;wn:l50e LBp4zI ?Lа,h*I^}ȏz&Meu_s˕ɉk:{'o V:XV)_f$  "^Y%IpOA`bJ(a"6onbA;R5 Gy2Y(329,M(^||/ N+<\'46RtJU,_w}ߪn_{#,m~9[unۅm0\/v/CV,H7TW]IG[C|Y=[sxJs"ziw3ڕGNhwT\B[=JQ _jwر7wB~47XcOC S0O>B9嗆cIDR[KZs~ǹUD,H6jqעk~l19VVae=2zwf j¥_Y}%#[Ql a/+Fq^ͻ|7g3i=]}7G;}nۅ &kzdzo.|FmOpʞòΆjw3&2o}ghRw>[6p#A~N wHxq59ZZ~29)b"/k3x8;Scǻ[=>2!2Ɛm($6 ;3!r\*=A 0=ٰ֬l47w䇹|scSke ] Q(ъS6.Rk+|ͦ}g+ULZaVL<;kvZ0=iiqun{ןn.J#s/8nZ&CdbGE[+A}'i무XuHlhFZzd?\2s]m`&v\I8+ީ$z3kOJUIWjZIeˊJUgO:х @`{ڱRzf =4N)҃t/?ѽpjGFB?vv^)9]`)EisýbSiLu1=_|{~Fpܕ,7a9<`Git;Wʹ\2}L)w8nZԍM֚֬Fݶk2ФɱY{we0wf޶\'+Ҹ;ͱoz=Z?Z_Q"ZlwL+eugԞmkOHa60331w6H Q("ADLHHB#,H˔H:sOmE p##ÕtRpnĬ_YI4ȯj-2m[fmZeZJ+θ^Pݸg  [jm__[}>; ۟%GQBO6:ɪj=_}/~ezp,z϶S;OݹglGg~6Vף_O/, 0 3<{EsY%{w ?65SXMLw2.㥖E/w[k.KnƅJkq23 !& <{`[Z?Z矍}~O}/x뙜r4b~ςٖsoF!YmnAǧ5pFX煗~zEϰmݑ}lAbϔbNu,JN\7>a\:,1! )ZT*{iⴉ✟UEiֆ1nfZ^z/4w~'lB ]q~'&vm<#,5} Q =+{W'w=n;*ς̈́yczoێBL ?ܗ%]n[vW.>x(v.I lK##GJyTV/V'7-tsK:7;Do04K}'X$(ow-?M︲?WP71m.~o-Q9 Bhvu `[B`m)r [mZ/K=|M611#ĕF'xC5%ښ{vS?WPCDdZ +Zqof,DAϭ_clY).l=ؖLN1YD؊xwC4-'-ɢU]J,:2Ń;gW>-V>c( V:F,Jؖ+N '?/[l` ^Ǯn.#n{tac 6\ UFw\PeL "K*/WZ7d21c#`[´۩͟ ~ƶ~GE13Qdt )tǞ ;2h\[V2H+2Aϩvn5e~oF$:/sW~s84jw1]0PK=Ֆd[vTt\e~J7Kkc>mg([o6c5!Sj'5VL^%!0˿O92_ĞlKe]?,\;"E~ahZŶrlG]Sl` 0lt74biMNПi]K##6[UJH6]x(-!͝==B!4#)#"0C&n5!m;B, ިE! |l;G:?_niBwAQiɍX^Fy+ 'c>>r`9yd/`d+s(0Dn*\87떐(USOչkߜDIþ`f"CgNGX]|m^M^3ׅ|_JzXlc҄((Ԫ+OLz#dWS)lS(zmoĉ/M>?j;J6ff'" CK,蓷fm(m 5 08e+Ѩe;ZL]i!X /ÏZ6Ytɲʗl^4>$ /_ؿ1!6.͕^X=r50 # ss\~ȲIJ1 Q:ߪgdl ] 0:"jw~CFkN셳>gD-%vQ>~>ecTJ嵥=֪;uD4X@ 0 ^k#Oﵡ$}|; ZEsV`!0hUL6gǓПF}wmeaW?bƬ;!0X]ᮓFF/ύ=҃FJ- v[|x``!c&NI. =O}є=Z0=ў?`-B36&WNwjm ]oPMҌNnf``dƙk )׋* s  !%ߴ<%Ʀ?}hP\mfD7ksnlW~XڛBYrb d綻8|{w sqׯŹЉ'-F\?j6^kFdm}-3ŽN楍sSa(zARr\wg1]}ܭ޷Y{6.HKdRNJ@r0'#yO A<$$DeJ EKE/p鵪.aHسVuMw?35U@lF9.dp]skߘrXccnrVNI&-M}.%P439s(}hϟnc'鷓X""ZZ>dH*3?2:aA*v p 0`ǻ G~vʇi|Z[6fmM*;_a K->|e򁟶[nZ+Za1HO5dӘTBwt|Nvv49 (;_pcŹūt3G'tio(Y(d5]C?IگxK=+ɩM^?v8LŮWfӅV>ȾX&&n3jFQg#4'VDDj+"b7bcl*Y-Z7A#0`s#*(L[(39rabϡs* Rp FM׫?rgeD%Qʵ&n(I-ZGFBm*}lv cKO ;|}߹ܢ͝8|Tn1nvj).\9vx"XP+ihk!9 M%v#bcʬ\;εpL}1J+=}׉ܱ{G'ero<8:Y:Q^?wҙ_tWL%NORĎvGDIJ%bo3!p`#0`VZa""Iec!nThwrEkd<Ӵڍuڮ봃G[3=>Z-.V/]hJq֒,  I4b=zw-0 ˿/pFSitZo,~%k\PqV*QZ[ 0m5evZ~yph}`lx"WX_Mg6$%&m7VE(%ʊh>a"arOJS0`cWY߱F%V 9# Rl>V<1֬t;5CXRtדN& +Ih-k(q?bDDK=Vtn{qG6rc퇞XZzn) 3{ةDm=z_nz]]#B`@bdVk`'FQ˳L0*? 57{=:h[M5FTڋv="?JՖV.Uol!vMNiVF3{2LFqe_|C]2Ə0ʮOKj'K鶪Wݤ["j[\~'_Xr-"&F7F$Q6\Ҽ|]aKdIDATVAk:Jqi6Od~ xY^j8YkLgQV)G}٭`khk?J|)i\v,p) @?fD\*7XaZ;Fk=F`;GV9ݓt@`jr##d"m74;%s;%Iɏ\=|]x5SJAwKv)D Jfߡ7OM.[i3ξ*N E^#07JV A+7g)/5+nɟ*@?MX٣^zٗĺ$#I"Q5?zsŅA Oxa[~m1V[kQF9[x~Oh%AQJ$HAX;ڷf|KÕn;Z#Gy 4CFu\Z?jE*Vыã9Q3Fl,.o1{JΠ3_;D(?Z{^Mrx'z0z,Mrqt$xj̓'N?XQQUBz ;#w7+XAcv/ZׇG'6NM,LF#opv>(%UqCάԽlv#+ʁ|eX;aqs.\[ag#lt.-ΥO?PXĪk/?[RhzZz D=+Ւj]Q:`MRN{xlu* 'fsSЭuSG.O<{K;bc-4URGoRFNO?HR~6ж{ DiOϨ??'.I]Jw[b#륕t[yJNS"r+Z97_!|Ǘt'*jg| o u>e뵑Ucs쯔S*;=7D+8{z=7E nJ+v9J;EXDo|l.v+jgk^' $ϼѓ[|(mMIb[hGĄ5ګ[|ȈX(s7S^J@n엔J^xU]kEtl-;+7Z5}so_8:9ҷRfNp"ʻJKMA!0`wSFM'z 3LL"GrL'l1v)-X`jv+i7durߵ\?BRJ=r'F'JG~}ӐDnL?| *O 0PJ~+Fq`#ֈtZ*k.(;||T='^JNh{JO  ۪bVb'7ՎzyDyN|i{Y`P >P;|gq)?gG ]JWDk{^ފX1f;6 nvZl4b'V7ܳ$""οvb/ 17~?{̓?h7w J$U7ū_.;|0G mM38CJDPf$c*v-"b౟;~oFZsJvOU+"qdV% 0H0`w0"Vc\iuXIb8L_zi|k H:۩5:{㈤O~o7ٳND`7ˋSgDuulAύ5JZfn D S~3Vbv~g.]3x)ݬO`J3Gks4vmq/S;g=šl=TWi7˽U >hm5Q.M-x&y)5Lx;~r[å VpӬ{ׇGAuhPZTFUN<ֹq3vXje0`-=x$*uES> 0`W5;[\VL?:IL?j^ u/|$OYe6F`gkV=W-g/Y{3X+kEvYQlAlGH™S>KVM9dlT-o]}gڻ`+Qډk /[wWuJ*_'N5/bl$|x_WEnj"LLsvG`>k_fK53C)osc+@?MX(\ɣ^mn*"ѭ>;7cy47utơ (zq3웫Ho{?#ѹŒ,^i5bkM8Jl>+azxpzdY{RS#)xX{7anFYk:-77~1R2M-'2 }ӭ.tj] # -GYc V̾ǞOO ""ͦX?]j.lk&0ODi)I()gH8w'cGZגnS5$7ő ?n̰~6 5Ga=75z=(;$= p+H,Nm3c~ۮ-WW^,Lr?h}:ٍ3g s^q~}m_jdJ;: ~d 6rfxg ?5qb0jg:Z/yَr{^F9S^n_(wk69op$uͪ{Յ}[{(KW}xD`nOɇdܮ ŝlܮmWIN+Fmf,%)ο^׋"Osؖ ^1⸁͏2?Us7-kҪvX62ܑR,F"ǽ`;e*O 3r`lD^ImZ8#AA{hz.TUtw ln@O$nyQTn3Vnj8ݑ(vD`zAT*'cm MԬv5g lK|zq<߈DSvmmНˆ#""KβKؖ 6E`)Ml`SPvA\7IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-5.5.png000066400000000000000000000015401410275732300236430ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<PLTEY6^9P.7|ZGS}2W5W4W5H~(.t}LQR|Lh@ONiBONiBOTUUUNiBuG|K|L|LsIbDh>mClClCeETUT1j)tRNS U_ rp~n|1rpq7bKGD,q pHYsE1mIDATxӵAω%n 7sI(sVo4SvGPޙD~fs=0 `0f-fӃctA`=x1%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-6.0.png000066400000000000000000000406441410275732300236470ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1@tIDATxwxTUu}E  Nz%=gR'uIw-$@ @H=qW}ײkEEM@yCV8.n5oҶ)u>NîNw ` ; p`p!` N3lU@0,q+p` ` ׎[nu+l]*TV?Vrg +m Yf-zܻIO.wgD۞pydį-*8Ķ^?0`qƪRejϞE+oQW_{v+ѿ^}#X  V.SnרqHkoI;jo[rGmOyJn}R䆇$>0~`oQMNߘ;pAM}->p.PvۜwQ&!Sa70h}knb{̡Щ_Fӛ?6fu?áGOSo9 fɥPLH6l"v' qħ~$?{ל9CW,lSL5 Xd( ]%-iVvЩYl=k[ޢT`8:o:}Z^b9YK|!ZfǪ.ę*S{n"26e-Om%=`l}mypHH/Ì=GRs?!-Z6)5uUY`XC= rqԶ-*‰8;$K*hI}#SS]2ZOo/]Unp Ol'%.vϽ7tۦ \Zb 빨+mJ[O1hp6-ɉ*,}”+-H,_^Znr6_z`.ٷ-ޟDW=C2ajcFN'T uJ{|Xi'Ǟ$8UoY5Ǵ$v{x_F{-[>#^ ]Yޟi#::"KBzܲ—XG>ClJc C^WDv-2MHA2|ul;}d/.E`oUܢrY61^NL:vctf纊4}5#(El?#Vzٱ:sOOS C}f痾 +l k]2zmtcN}9*r{4:ݬWub;N79]o+_Tu/bJ_Z/)ItxF6dmjC]^{ Wm7:gϛ_95#10šٷWh+V'J g)7қl@9kmcjya{cWKlZnRl3EFU݄xKMbbR^lܛ+%n{I~<_܍njsFrF>1mm{^\L¹R֤ԋ V6x{~W[OKޟ%K63wKrKrs|Ϝ0?(q|CT|}TSo%=\(j3 wO .qaEndq\@QazOb7G4TR ;7D75~%|;x?]6viMoqr{cjV)7iDv`}P?m! 1T Cv:s'TJ_Wx΃ _6CvE]+9Gnf0OJ-O((9'y.,0搢5a  X,> 6Ά:Ob*&wARɤ4-+MYRצyϝ?Ř렍x3b1)˝Λ|9+L{VjwsM>j_6o{1~Mlfk]jf oF'%zW1/DS钳4G%V{,!/~ouʴŹYLsǗ'0-^&nbRY9&l ƕy҃bl=re[Cw͚55sUԬtiUzKurqC$c]LC~%I.u΋Gr6_瘺:]6+ankK=#.Ứ*칅VΏ_'GH{%&3ݖV&) -]CGP'Jo8&UCm A6\M1z~{ΐt[<_\-Ldu!&0= E_dwʾ5uʾ؄\{~k]zBbyBTzc`@ *nOS%Q)Hp|#tt_7SNr*!= N:CrEyfϝ9{L3= 䉛mb[T6ܼc痹=ew ?6m۩Ҷ+d3hY w_OڛEIBС_)Pw;qHސ<9$F:ɸ"oA:yy5U%q[ģW-5mJ%۸{€Eiʼn|r]+C__*$vkfNϳ:?7|V=Ƴ:0 )vp UoUZnWֵ+]jbD U6Z7)eMΎek]f7z/B%lf]\6^kkSNHu2̜Mq]>NդjW>z#Y`]9+{<%2䟺Q%M|_Km7S2J'vq5eI+./^vt ]ixKixoaJkmh0Xi;ק-3TiGu%37|Eϼ10ÝOW.K-n |1Q2Gz0?\' w((6v6'%''6'FAt#OY"%HLHة)J_RzNЅ{Cã?]9+bfu!v(Ie ?ċ 1e:Eqa[B}!"!O8Ch0O"Ktŧ%7l(Nؔ񪃿^-*3-Ic `M[ /3gC$ל*5x jnCNWNg2]ytihx˳C$cw sS;|>2[SkM$Oא ALMO!> ef YTÖD$Ff43z7̑p} ޟh񚓷>i{zstk~dyUE.^:umrI)e#`;gg ݤq;"{ C2>/j6K:e7ա˓B!Է3Cxxml)8s9^B'la8hGZjZ+RKsNvY[F-qHޘ5S̊ص&i\=}JƦ Sח'_b[ޜm&h\^ZuqzvQ%yO mޟ.X=/gItIPSa" 1X1aVZ^(kyZ;b(%5{~eVϧMѭq#ܜI5t[|r+mIabbELY't?PހI"VƔ`87=Ӯ(;3>赬Ͻ%bd/_!oAڪŨ'W?*E3Y[T'aKbZ^76jS>%c}f9[؟K8'='^Qdm;atbBXaʍ!_^ٜ&USiC^9:}OFű[쓷 8)NƵiV6ml:TIyGN:>ɵuѥ-smbVn{7VabӺ+J[,i|}LsrVbM(H@%3dy䊄c_G7hWk' 2wH^✹4;|b~[?^Ko{_<~5 rѓs5Fd+cZ\f 'aP(?;ٴ&Ac  I:{YS-Kr\3 + i~ ,ޛ*5#$s\Hfy96XFnCNௗ ccrRt&ySr]+3WLH=U}lVn:0C R);at[]sLL*3x](__Gڛm^@n!]ypCaӼ/ /VT)6DltfGNVjz9ݲoTeZ*N;fZ[zVbOpJJNagwFߤm`c!e}lV|}E6Et6E8fe=褐 *]Uu~o,w3x*\z+o(-J0KΒ\$YڤMTmXU`]Ýc¶Xz=rKMOtLj_6+}y|߿_fuȾo ]254-{QbFMUf:fU?9OCV^qs^o5ûT^iD2Nr`-֭{V(~K΂!Ov қ=?3u ߚ:e<IJ6̂2Vz)Xd5/rŲ_ąnJ֐Eg vIs?je'U?о+RJfgXi6N峑19,F\xDp8BgFGY1 ml~~}.nU무rk]BYzgmO{]ɻ:0ί2]j0'jތ[-+`qR: vw*Q>0Z-Nt6b!p8EIN qv@,;F?V`w}vw ^oͮg#7}mjk]J)u(Fߩ^vC“>)w ^kP[A?iSN p﯒7gN{#ѵL![)ֺ6% #˧^//9:a(ECVg:RvWSE&D$Ft['Oz2ek  p~o=Z'x|O:r\- 0ę! C dux}0sc&M z ~<%E|S}ߋ*UҶ 08}C9]w^M&N N8fu*KI.p#?w05吲66E5>NkSoנwƄ@0`Ok8(vLYo z%]NEEg&<8E  y}Cy}Ÿx8%|2AV3)F CGW3VY<`82{~SL0yp`g,V N &V O VϽ=҃@089ݲRߌ*ޑx) 3%aBǴ4UYdk~ #ߠTdPLZiLo2 /rEmc4-*s@4S8i~x+\`NI_i`##OiKQYиB%/ Fܷ+WjTih[f病`ptd"KbF7S ~ ed `8դCՁ2u ߲ N_m"*dOӁ>ў\3Z6+CE7 s]ا)2-۳pp ֈ" Sy, x+ Si;=Z:orr{z vI1~s#g7q}0LKᇔ-]j&B* <躋%_1  'v%$/5<>f&9]gV^ف/.Xᒳ4F[o9K.T'H{B%.SX`8ɭO&y`}QvJ?wpNoxʐ#۟7u[:[}SSNiO}:*i, 0= ;z⤤e d ߥy\|D, gO"j.s}# 7K/W\yC#X`zy!!}|Z[z(ag?/J{mHX`zxת{=w3dxw 6cKn}V.‹[wã_6碑X`)[V+|s>6<Po] qFp 2ۤ Gp(Q59VFn}j$dD3+McUns N,0 V$M1u`0Tm2 X `홻 +rˎ&_nq\7=!^5;ƌ41RyA\Ƈ`D^!mfgwA0TO[qÂm }K^߹j<^Emj}qGX`3w];&]w‘cU7I?L[,d=_I<S# ({|T"qUr?N~pJkUtW'p=$"'S,x<^P8.v m׆1k\[X)`Lbӣ;S?O88A{GW%u~$}yƞ 'kWovjݬ0d9S7[F&*V p bVw5Lq7  ~ڿ`ތZ%d5E!EWU C3 n{zqα7%0D|f{7I_$]*mdr9i)A7k ^n ~?IUB[jY0EC,h6$Q<$S~:J:X)RV8 ‹oa'~/-JkxIѣ"hB} L>Pnp [oqN;|'>]^_{SQ; + .pD Z; ✋ۙA`H#p8soRIUA(5Qk#EhN, ]^A]c |Pr]{_ws^u#,4p<$U^=OħV3?5_ї^ZG U:=,:kO.>ˮB1Jt '3dGI gvZ11"!yK{lei%i!3V zY5tWȖ"u[޼BKMZש#iNmlZMoiSYiZO>jv+ Fzs >f3Z}>VlT9KTw-51V.8鎱ѷS&MH7)e]asKS(8uѠ|&x^WGipMt}jtce9 qSvKLsf8MkԜCO#>5 1NӁk&!0wrM q;d\mkU3s0<[32≫n}bV8-_] \EMs6Yu^cȌSjwLp.cpI"W]dõ\DCflpnhZߩ|hǦ])jZg& v CW跎]0dO178!/ Y\-Hws0 k$Ut]C֍ :7}f錳:҈;65ISÒv ~k0DNH֟8hWZkͣ;q:T9 Y/uǔx5 ' % 5s qjذ["Ng#Flwc.oӣ)Ҕ5uH?.ê!ffbҹ{`R=PzCoyl Ǐ k{շ?q %ZGMӗ(wJC'#U`x{ߟ\sշ>&XTl/ J5EHu}&{"MH՝`G%'/gYPlzZf) Y.'.k?W |eqYUy ډ.9Kre3gΝfZ=9}MĤǽ\w..~6f8n3ƨ.wֻefJ>My%)%Mӏ6Kʬuʄkon׾nϯ[0k#*FAkB);{MkVKnz&scDkRn mޟ 3fϞXmVYi;[iFߪk4BYI5_*|^'OzHYhW8wnHǿLwGcnfi^p`G""7OX69<%{upaAHQJ,9h\u󅻏!~+E%T1i;x;K%*n.Morhv5Wzo6C~%V7WA|mI-$:e"K4;lcwבn% *~9~kd %qs 瓀Ŧ" ծ_ugI$'Ȝ, prd}Kfb!|U[z?]93Y{ `sJ$ \5K{-/v^јő׌NCAxQv>ف_"O8=1umK.fZWѷlbUi+ 0\ث$+<$/}%9n-8Q}E춠3|?"1-U[¹3C ◃A/ }lܙs {.*p]0kYت F+RJ fU,. )AbH.i?tskTN+3̲7lITֵ+ L3mKĉewɾ}'=#0ⓇݲC#lR=QZî0 ]vkFOciSZkO~gxÄqkM{gbTnK͘J09`nktˌ_& u~oyy&h4Xi[Φbc̕%q[T~}_KvP ]08#({\ y% táK.z&]|9$QVLYo z-agȋq;^/q;՞]A˲VX:MSMR<66Ncfe/NyW|p`_Bݡ$?|0BnW_,1͂ҟ_H}WZR#XUO `{͙57.Uhc!:ܕYV^ۜ[Y+`H0HvUa ' ' )MnOٝ}2WB)I7f|~{RiM^%25(I4O /:a9I63Œ1/>jiW-p4,=1NĤmAKWg|7kcoeIx6B˃{ϙvuس0866]\|CS) Y `8~CӲ>JV }{Ǫɂ ` ` `S9V N `"` `8nl-*ZSn$ap]rMIKSKSĀ8p ?N0@>!2svqצ툵kuJUPsY;ʹ*R#{Mj}Zצ hnWSߟ%$[;^j @0 @0`@0  *C ' ; @0 @0 @0  @0 @0 @06th_ N S` @0 @0 `@07=3;?0υ|!0cᎱ7=&̑>i !Bo_]HY 1[N0Ï{lcbmW N3N^=N^5.<}JJ0=ny{`Jژ5N\t|ax`~-Mk/ry'KMFTDYM.b0x pr-Hfs0D  aalh+`[Qs0X ~! -]qkﶸilĖ(p`G0  r0ahU}%gmO`X: O @00Jrȱ7 ~5s0 wwKI0  Ίˮ9yPô۞^ȥW*'o <v;3 0)a3x5xz`@0  q0l`v  N ny`í0\rn}:σ!`@0ptPF0 N0F08.Zr]khq.r7=ph`@0  i0L8pn@0,Lny̕` .Tr^c\vHa`@0  V?X%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-7.0.png000066400000000000000000000354261410275732300236520ustar00rootroot00000000000000PNG  IHDR T=iCCPsRGBc``<L y%EAN Q H 17`d`v D20\ ,aǣ,Z?H:b'A vyIA b'@39>@B:; Z dg`<!4a{;BVmbe;TZQwd(H,JK34-rH \wk10I 'Br6G pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/ IDATxi}9rnAqEIŴQ:$SOƙT<5J⊫\.ǖS)NeЉ%EK2%KE܉4n~]ΙE%tU( |OOS;ӇVj3Ы{sџ\y"b7c uzE0`/@_} "E0`/@_} "42w)6M1&z ioР{ݒ󼞫ݮW/-š._wޜ(㚷{*u Kj>*'.;~Oiv,l"GGHp&(Q{GrhНp\ť g<5wc/)'~ݲl`-;1yväX+AtDTr=`_6f^ʻNf*YIddQf硧4&nUȯ ~u &amYeT{2U(+Ë\}vt"aZ1Jw:~~M=#;V&+;./K\uOtsݎġ+3y5o0FYkU(Q:&+ f|3yz_;63 [ɝ OG'=f ?3VEJ9;Lvn2(o~:Wh8c\]O_:;O,1cHwY8Z(ZUVw`c ?OcNMK$G f;wHKOת\Յ.9:qv#{5 '^H9n׫ZuߊNIFD\sᡝ{.wtdN+iY]1b-IprJj葇Sc{+$3cV8 ֽt|ѯ`k8:v^{":_KngaM"u3=׵(e%ZkpŽ+w]VkϙGv:H"Fծ`c ]KZvQNE|s9Jlƻ E0Frw{ǡC;<hqZvtYKۻ]/NYcTay4ٽ^"H:հ7V[j1{^7}gi-JVVsG5S+όZow6P< ţg=>-,[t=xsyؓ_o֒l~zrk {Q+-fs^'i@g=j)+yf-Zwܱ>ڏ W"n+*D~7k=M{#g'7{׌HgCl*a=1jKA\hH5 ~"fr}#㕣A\L\8yzbyzcZ>uix!k~!7#6Dnd"1חX;iml98{btip~$b~:#YU: $h7L.v=qEDe2q!hf}s\qDZeDr=PZzO$R"aF-7[-Wv~n_qʮ=O s/8AqG9/emJp8qVY d(52z6n؋jJ1ZĹ_Ddۭ?zظa+;[X/6ֽvq]|>#Z%pG"6О}VG9p|o"?lbtzh=ƙ(rFJ>Oz8V3{ey~ⵙs {Co׫w/VwvoCc}l3 w.a#ߟ Df+~V9uÉ͈o׎ҹB<,ISkqQb\yP58p]=>-&]{obF@2jQQ׉wlMV?a|x]nB:t=],N)kg+\?doW'Lfh|E⽗d3a"EБkkt}5ZkC=QJTDZC#VL릪PSZX2FKu{p[ 6Сd%ٕyC#,V9|Dwc^U-pk&a:G+I+-Z)QAm&2}A/]UZJ6ZI%řç뵩J"M '`Zqv˩V\muճ~1PkqcG_x"x?`3 8wdrخ _;uYեrrKlC)]gF]^ڝ+V$ ./iПu#WgNԖGZ\iu\D)׳B)WWW&f퉺ㆎzni%}`{n4]cGVtADDHaOW^>#_NggyO T)Q|8T\<(%x*+?ʇӹhU'1?˿\yeyp/"bT:[}rmڨLUg# ?4l+rӓc#C3q\2VRYӗw_{3@#HRsxqskRJFwL^ݯL\:?0Ҹw=V my%q'OkiT*ZĺgmyoHLq>:奱sZ :\$J/n^sNwD~ZڱRתXE"zPJ{?xqB^I^MtCǣ¼ݠ:<@)Qeg~o6O&Ύ߳SI: B^\z*LfvFE:KnbYO-\b2:"AO 3]QDAϫunrjQh# )02x0e&^-.[pѢUem[Ys:10zXX-Ǯ\Lv.uثL_s7{|;zJ㗴z*߬Njd2%R6k3D;Mz^=;2a}dq8U%[8n,\R>Z۬ZRF#7QZ)ׯ%+&k[^GZ"X+HEѱKw5;뵩O`X'GrG\n"7jiQzeOYDD;F׾C[(΅zJ2)Z;Jk85FƨVN4Lk( grq3)iu~w^l+cˋΙG#z<9Pi_`Uu/<ؗQVKd7;sM8q%)G[-u&"OwsUJ5|' n/]Ϥ޼kX%ڹRJkqҹ`8|}L8zƟggy#n?u ݎ6N uHk7(ɴ%~O$NL,=7.ѹ?i.\^=c#;)m^.,\:|i*ep-IFax~H2e-LoI88dJ͖:-sK3[R  o 5@0;_ЮC1WdWCNap=8JR`бW~fxl~_l[hB>L,ޟw_1V;.\,/[Z=^5Q&q!xQyfqlץt{bϋ2oJl1XiSW`D*[n[ Z wr7f> ~vd|v9wɓH:+r_]:go9~X#I=.8'tW?p?IegR4/CͺN[clijƨqoMJ] 8r:8]cTXd./Ϗ054Lnn0]-EqEnzL%w=\1xYFqKԪ'/]8zexyh& @c#jKl [U?_{˿t͡ 9'ql`a?ח䩧7{K.96ax 3X{Iw46pOg*_~s'^ԊvN%ݎ{nGvi7cTw3Ηj{804_AY/W+w_vv5'Ң՟O`1W܉ZV炿~o8~hxG 2ke"Ƿ oO)ro,nK;kVm +=++~ADD%^-~$&&3d_^]FSdmu\jN,8RڹF*M"OE"D p]ضzycnkVl4{Sg4S1c=NYNjd- .Msrqfꡓ?{1ϳ5I}}xQ"Qk]*˕NVf}C;w^çx- -_OL|Kw>-B)f~ʘˡ1*VXezRb])DZNq|3/UO)kZ?C?LШ-\n|YDu3g+gά%Ow.s\ٯV'yDbHltNWk9I*6DZ8ֻ@u["k|grV}qŁʋdzuq~uZcc]/i\7'Z32aSK(kZe?<|t닪EDX$ f\hҋz~ֽѥFw 7ڱ(&qYG8Op"B`#~X~çȖG$18An;^7UkTKs.UЫ{p&ڡu=]],ɶve^xQJ\!{xCqdk۸n{sϾs_槵W)V"TW;ĊQJ̪1ʸ^t 9c=YN}(K刺`PZt&q5V0{uuˋ^;-\./O>tîkV3z?!XK|qOZx8Qgg&]r}'#J6rNul"2dY\k7`Ikat&ʸV;v7sw^kКTybrt7l\ @0drsFvO[~B0ބ1"Q;wX8f"nf1cܙnziW8~DDRJGSkN̩,Ӊ|R25(6t=[ymǁ~BmnkncOS/V7z[Vfwn_7҈f wnIͽs^y%q!/?srKn$m'<4]X|/Y5[ja@"G[y.nI" 1}e|/UHg]+}7[/֊u̢1ꊵe0w6s6'Np&6 60ɸOe QUEV3Dz|5zTFBcM=qjk}]l.aLt(wB9Id{9]ۓL)(')W=W.s&6"-~'.QO>d|SjIƮ'Hf}}|jTv# .I[܇ ~Hv'ё.VJY " [Ç C+OnI(-*[p y]?aySvz0 y$rlzbVf, /zI}(?282JmX%5dZ?nc41FbioH%ikڱR궉Luy :&Kv3C>`MqKn"ޗHްnX0Jv~h&l0XgQh*'f`MSJ?^9K 7{LXܒvteWo|f `Fq]3/9:H+ʊ`a=M<هww?(.`b%?p{a 6qInvlLގ(> bn?6Oj傈uk;}X˵y7{0mdǧsXE r~t[u|nfmE7Vl^^Wk$cnyS 7=0" ]Y*fðM $$5QckK1b@z&n+n] `&TX_Nf?aV72d{[./Kڊ?Fr%uo2-nK T`#YN!#Hv޸p9Oe@iF|+? d""n/.Q viN{%]0ðJZklnF,^h,K̮F韈ayC^n;fc'F^QQymVW%UW|7ͳ=}j +We-܁%i~ϯ.vMRJqtOx~3Lwӽ)ng68ښy~ۖ~ƶ+ 0lU7>> -%"*xb8=\xm%X}H$Š+[EMbQɌ""D-ui|ޓtMS7kߙ z<]skkWHV\JV6vE0lQMƏ\?勈hqGnG5nlԥGu]Y_k-ql{̳/m]Үw&׎爈Xln8:zOqw8hg8Mө.ZYٳ뤖1׋/)J>.۳߹xYD ?`آ "JJeul&ղ1Q/lƲDkR]l7+ӰdJّ]C33p!7!%V(DAW^\,/MN7+d#/w狕&^ Mۮ4偫t- %Rΰ;:|hґc̝|$ "lXDۖg""Z[(mPge^gkt2Vc0y5Vr%#+v`om m- 񱝧Ɲp]~H-Zzp|;nK^04a&:jA=aqՠhu?9M}qm0ðť #C31o4EnT^-\ zc;z}6.苯|C[Y,);zh3^ n?0lQvԨVN]D2Q_c[͉y^#7ƓUE6[#:N+Mͷߓ'&${iٯ`آBݔ,\5^~Q>}xl}nٙHIV+SKL2Y옺Biyxia✉3ǶCŝ3Fy-*ʫ_9sa_+6Egwk+߫Ug.=[]~RlulxvАVJRZuFX\n&Ub(Jksl&|`ϥȎ̋3p">*MeG )(NFziY.^oF7_)QIĕ7CG3yD1);5wj6^o4;E׶e{SX,UvL,|P9?醈Ə]@ZvHn_) LNG{7r|ޖ"S̙(k&b&6{\XܒeF^ŋtef?_zmE0йz>y~7W~qnG-Ix[Ti4zC7{<0#̠w;&2#]ծΝ]9yV O#IFRCKne2=@Df`;b'7?uIƃ?Nwl0>0/opwaH]sJ/|3 "l$#JM䍛k/];~`[PŗRHe `#pS%?,;w'B}i]8`r6{X?r#Rj].b(ߺ~J;tK d{F3Z16)Os9 X#FQz*SJw=yn  `k} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_} "E0`/@_fm#шh`+# 5D ;(Q"5*j=&X1úfMD\k`8":6Dŷߛ`8o>]"@_} bĊ~ mu|{WK YlAÝ QʵKuYrBjuMN˶ʗtr% wڕDƢg} "r[E0`ugIc!n/@_} n/@_} XwT6{ 5]#"f0@_} "E0`/guNE E Xwn/a[E0`/@_} "U*m"!Z=2@_} "E0`Ң2=2@_l]]jǀ;8 (Kf*C! @$z   @$3`Vl9  @$H0`]$  :Qx_IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-8.0.png000066400000000000000000000201431410275732300236410ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE13IDATxwxU A(Hr)IO!;V,P@@DZ:ufggf_guvfw}{; yzsN"nNvi+2b*sb-m/N(m5@0 ` @0@0 ` A0`  @0 ` @0 `pBCnrdjѿ$Eijl0z1y[rl8v+/{E\x5*_hWu$w6ӄg3oҼWa Ұ'RZ ~Py(nϿ~K>~}׹%κ䪪˻^O=B?*snސacI+56ɩg_rjAkSkfFC᎜.Yۥ:~A}7ljfp^i65Ps2[^j7a-Noi1 ut\iDP&jR0t/ڕz~)/g~J}YZ:m|P&jT0Tod.ؚy P/ҲpVZ4Pc!w].H9ʸ']pU  EN>ʻ&΁@8'_j]qXP&j|0Lݙa#vҬ[Aۙ4 78_?yMCcN9If mɻvK=L`8BenLlٯ}2S J)wĝעf ЭpGuO3~^e@0TyBUIK{ի !㸧G_yt `隳)ݰ{ո@0 E'>?e în:fvU.23нhWnum.Wsk`LqnC&9RA0!A0ONz<%}aR-w7.Hƌu῕nk#rW%%׺'uзVUUUlZV`&)x6eB4~a7êeoUwG>%éEuac_>~8 SX|T M~t{GqK[@0(~13`R0``b緿ʤ`XTy tJTJx />9D@M)+)GS.H ,}FԎ$`))oڐw#n8{fjp0}cύ7ZA݆uM(`l8lYR[++Ny'X aբ]gmlqS䵑M2W=+B/~Zf7#@0|e,yԭ җ&r堫M,/GGc|u)םtP!l\ig@0Xg F*|vb׹a$8&jr0|aOxtП?rgZ\خ#W@0yzR^CWF]QZnձdOТg;\d@0|m_$/af_ /[}wCCo׹eAt _4kGVUUe't Geq 'w`ZE\5U˂/0 ϰ2 _>k[y[`r,9_L47uPڇ~K;_zh54G*O?r򔇓F:9kC- WLpF3օ V_ XʌuS W/uel@k_F'_ {8FkC>WPr”2|{wAm+ߡY=A{UQѷ~O-y7vZxM⬙듷/~]do8֯wGYO7taFK_,X=tmdkV,.ƍ7O<[{HUd̝u}Nwwıw HN]ҿqi[itS7}iֳ6$Z;@0@ 4dN\;IAS{UU? v>?ѤҲo@ M6 hЯ; kS/!  uϯ~熮X0_{k(uˑݍKG>)9?qc?ޔY"?跭c87-k/`[Wf0\7dӰrq3) dO7p۰np~eNrHY,Лorct|ZL{1%(^ =OnC_ײ^J7n8tc ꛦgK~=i0AۄAje4oеO'}ٱì=nJ2/>hշ9κ(h#&1 F9`jM*,oVg6ink\iDФ˘)Aج`3U]s5W}-w;wOµUӂ|8ۼ[Шu_jآ/M: o8vaV7:9K2IYdo7=-lgδn~ Zoʡ`hتW6;K;ïI)mxwdzb 5etb7Y4 UI3'?|a-,ιk4z&qE(Z3y_SYWlSmˋ/|#;".~4_U|hmu뎸up0mFm^?򂎣{fYS#{MTؽhk^;Ny|ԁY#-x~?e=9oBCք\4?cײ"pgޡMGni^3cZ5~WESw*Y_vo*§Kօ2Ò?޸1ˇ.$c8ResԾqϛܳ:G=+JY>G}ы#t%ƒ{#I4TTX7#oqj[8].)[ئC.X{s3b8 =m8f^>O3^I}{IC4yP ,R {m{\S1 գ[aev e74fmLMv 4Tݸ1yFጙ)7UUI׹۴&mozCns?ةr߳h#vX wF>Z zD_t{/s|زR Ǔ.<Я/4̖ft.㉱1P[Wi,gڴJ{|o{4T84>={D>*X=tUҁMw&h8 &kk:^?q;OZ3un_xߔdz^hI漒%kS~9kclOylG7zڰ/rp} Sxؙ^tBpnz-Noi콣,*%g9?3֏Q[=M鿬\V&5,NpkԦ_Z];# {-^<{ʙO0e;Sޭyǘ{^XΆٛ.ݞ]Ǒi^=/~J^em:z 3qYl)ݞ"<.~j]SWO~tҖٯű>iZ߆-ݶ^'SN?7ӈU I;#vܞkɊ ;RP3'R~GȻ?4o˰8JGq{uN;g8\7QEէ':nWԜ׆b}&skG}`檲i_Í÷J^} N`bYg?yㄇsזǾ1iϥ6Y2yGѤٛ_<3𛇘p8у!2g'_(ۑʴ?=OY}â]'=4$wMw)A=L<]f7ݹlQ?[HUϧ-i9ڏ$U?yA]u?e=CHY5bVfNPOJy/~r,'%U?]5' &͋N`ؙ%gwָg?`[^4K(4@قc2{S>5o_戻;kc{#Y;hdCcW$jgUylI5 ߙ%F~5ɥqu>%w_8º)u +*x.w7d_rz'G_S3}oS'+l傒p47;MPїuY˃{4} .9{2>Pʔf' L 'GG 8$/>!2`ٛG9RDwčK]<  #`A~N`蚿73[oڈHՊOppֆOׄccڋay.Tҷ0YRq9[fW>7t{m;GN-N;d+'`0:V8`84 ٨8~4a  vg|)Iˋ>qS|a4~F|op4N}-ó,1?6lGOW+t tɏhW{Gs VnԶ_0Tgؓ׎A*;fuɾGCS7)`Q-Ks?,~CŁ`3[ip8bwtۚ[!ns3n[~{њI{N{z_θ3 ^3$={yjV09<}ɾ?O2AݤcݳtuN.j^0T )|#@YŁl&'?qԋPagNmcja;kݴ]s_lٯϥ׏=*5-G/8va't+%:` %FMM Z ~ :a).qr`ؾA  oF]Z1.Sдm˂QrÂV p:4~pP4-"k)N?ys^݅;=b##ץWgQzѓ kگ/ 9 G S| 3 L&ݖt/y9ӆFVgGggO#4nWhݲ_"" u O~gUrEk˶E.o&;ީyo544{޳cɷ)ʼnA͂m/m0Ծ uY]hyu6.߸M5;O<ᚗH'#oB# kD#P,b[튗oNZ=KR4̞#eiսWjsB q5%?1>Xؠp(-#Ȝ;<wcnP|_$()8(>o G~?NWXq&^:hʵNy>4Qŭ)oL+-VpBZBϖ+y,bAp_8^ w4}?>#F?ڣE'"/T<<펌ªykw\]®[C 9;غf&]}"]ܣp͐3I=Z»RP"e*y$*]s;9)mkW% ؖ#DWc[,q;X+^gt~@ ZhލՏfTT=fgcs)wL+kNJ;V\w"6IǢqàhY|ĚXt j>S =n-"4Q'O7~S4"邫RZB)-ajjPlXmyO{w_X$|cQVخO ߭Y¨VޔPz>3iۤ;=7GB,T9oMoK[Uzo5yG+8p∎& ,~Zj0.  :Xx8uL%/rG~P(`'O)ֲ侜U#/W,|lF1sɜ8pE'״4ijGxib¾u7Ph Ofsz֏mN{qpNtRPxI:]2^F\=e q6(VtNs'4Ȫ!=J_Jh4,z.H\9lapo~3+uW{ܽ?YPVڢotb?Δ 8E;No3wk۶6E39K۱_p%NNss]uZ_p߼/yu?>{pO =߳."蚹4v3}H}Ǵt/Oճ{ɳ2ggII/鑛p{5a~~vk#'h3'ztU"N`8#:#UO 9`wЪuqmɏkٮ[^ܬm+h{Q.l+wـF_\e*U'\W`٢BVt?Ii4;u\gG`d}zV&#vx`' ~95?Ҭ͙A[N~Y١b[ޤ/F7{#R 6~9á\ukD_ 98nP5wxP%|]MJvAȚ)Ko9k}Ţa+mx-`SXaAޒGT 8pݡyO8Fչ-r :zrWwXR2_M0gTPa0pC+3RUXU`ރ+F}9ݬ[`؀#{^=oH;r;_ &ޜ}+?~lx-ڣZs$輱o5o8NYϨY|E~7ןpz~mZ9t͹ ˷[y8'~`S\ܫ= w~w]_ l l|wU#Xl _?y.Ip ,ʠG^|\΂-o>Wͅ{"}2lݮݳw^7|[/_ϪÑ_;y+u$ \Hd{Ce 'U?V1Q=ڔ3>CÃ9JݹpwkZ~ okN B0G~:/(\}Yc7vMvNjِoaI l=鶜WJ irAM1` RR>)3EYgM#n͑6?`/HJqr3=UXxxk+ iMlV o7bx+E~`W_ZAE;_$;vH)gl Y"ψX7 ?3\7ysMzbɋǶv{%' ق/B?Xs4g ./:tNi'v yƐO/=7H-,32i ԸZސ^Џ˷}엗 M<>zsM%=_}Ÿ=m4ZޞLw. .EkO+/eC?YJD+ s |K&xp!54Ù+?cRiUiݘ^lVw[^?^y(I~5ysƺℾ 8/jd}})3F%N20efbj\V[Xerv>W# џN4$޹.Lᆥ/졂ʺݑޕt˰Z9/ʙ1!; SI&'N3xRBO q_4O7Ͽ"[Њag.x8O<:\P}Ku7>W~kmyvW~٪.Jo-z?ܯ-K1'cuּ:jӽY*^8gkޙf,[p׼Cw=38+pO{Eߚ~OauxMy7dz 5l:9/ic-RRmָMlF&ɍtqo$dk$`iF6 jW32WAi[ *{(omњkd5xk֪y|o+s7-0->_^T5}`9;|p3'oκe斂+.o~%? .5Z,ymnP+EC?ο_СwA+[jԣJK=V_utPYNJ[i[>ZRO?zxK~u(ƕ#_{&7Qz?i.s+ߴ\{>^+ΦXk~l+xo )Ch9kYo ]s^+Ӄ̹Âꎔ'վ$)K*mɮ6sskU;‡ƒ}#ȟ~r?8A=Y#k2.y7,q:tiQvDrV-K(Q={ ,\1_Cywo^3ys~Mu3ݺ`uA%/~ƽKB+/Y hZ|_a0Ƽ .} ΑXryAYqp̏<5ۓVĢe3,yqb[w>7>gѺH(WL='HN FK (8©wEً+ }0Vys oMyDY;;lH2/V4s@~B0|0Rf?W;j 7Oc||o~ZH9S;vgIP a`MAP8Ѻw?_J2 Sf&ߔx={K=0QF hH~4}+=?Oג'5g?1;38Z`E -+1+:Ǚ7ڷH ёEυn+ΟT .x?|[%ÇOHh N}UX% e';w3捜U7P}+F~2e6oqEa¦|8i_?y9-+)l_{#oGoɖwan4m7V?ϕMٜ~o!h1j繫g #eɵOmX|F=OOs1.z`CS-;? ߢ5iI<ܞA.iھiд{~Qqrۗlέ|$ُVgtzrW,{m~308AΨK1;uЊߒ8=H-y> miS;Ჽ%z䡩/:ЂF[1ߪy,|#)y;!&;(\i;?-~wa'*L='B;c3_zaKߗ)izrs.m}Nڟ9〮A+<{9u3'3-_ I_7cuGnmS\{g7qù<^=zι2, ^:%w:d/H W獸`O[S#eÿ\/ؖt-ïD..`hM67:IШqC!Hyb%,M[|ϊfPoN2c_/~_*ʃo)֗p8gP"=wSN~>"%] zc!L%ɷMtkVznApv >tm &`NIWhِ9Fhڽ3jw1TĘY{q&_Β+Sk\|mA^5:➽ۥ&Kֿsڌ!eJ\!pE)ۋ; q=0sSߥ}ť&۪0kmF <>qEri .K[  P{ܽS.ީ}R hKC^cxW]pU1mgm '@E)O6?5YgG^\Fg4 =tOiͣH*mmh=}pz6Ton9+v8vO\|u%mAV8 ޛ#Շ*OgdS%whٶw"|oe w  #ѿ=S{y+@0|D0<=`A0` A0 `  @0 ` @0 ` A0`  @0A0` A0` ` @0 ` @0@0 ` A0`  @0 ` @0 ` @0A0` A0 `  @0 ` @0 ` A0`  @0 ` @08-pc4K;Z~2>ij8][֊}'=4o`3+j 8 u8邫F̽kҮ4rVvv#li 嶥!Mt>K u/X/ ,@0 ` a>Zez4/gd3vMI9\!?լg-{ݒb%3ѕ |@Kz51 aW MM}dRbKSqݲWfƗ-? 8urkUjפGpBŋevO=ٙu=ט'T ]969|,|]R6݆_w򶩉+f-JW*Ŷ0l۵q!C+^!~zf-/ L :V\Դk3vGW?EH}0Orъ> 1eb6݆yaa<]١ݲW XDIROܲ0dQ6:cG/5kbs2HG\B㥉5GʢPg`/Z\W1GOMEf=3Bl/SWXeǿJ^,Xwpk~ b_YmYd/|jNR _F= 7Tn?}QHRe{WOcf{)s|גi[H>V-Gˆ-x|n/;1ߜPj``(> O!LlZ'ջO_tѷtSƲGXwg2go͸6ϼ,O}\0) I|mxbT{䖄Wfb"@t^*}oNξ+,=~K p*ClABѲ?:^!7>[5kykֲ.߻)=r) w秧]?wAS:tԸĵ6;]0 [A0` A0 `  @0 ` @0 ` A0`  @0A0` A0` ` @0 ` @0@0 ` A0` @0 ` A0`  @08Ļ%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_-9.5.png000066400000000000000000000015401410275732300236470ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<PLTEY6^9P.7|ZGS}2W5W4W5H~(.t}LQR|Lh@ONiBONiBOTUUUNiBuG|K|L|LsIbDh>mClClCeETUT1j)tRNS U_ rp~n|1rpq7bKGD,q pHYsE1mIDATxӵAω%n 7sI(sVo4SvGPޙD~fs=0 `0f-fӃctA`=x1%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_0.0.png000066400000000000000000000376411410275732300235670ustar00rootroot00000000000000PNG  IHDR T=iCCPGIMP built-in sRGB(}=H@_?D8dNDE EjVL.& IZpc⬫ ~89:)HK -b<8ǻ{w^fT2Rɮ FDb>'Ix{zY=JdO eaoOmZ:}0+J 9A$~~6ҩy0PhcYP'Q?yZ= C9me4" B*J(BV)ڏ{H.\%0r,ݚq7):^lc5> xRf>Iл \\4y"OdH3,0p t5q pp({]{vrk pHYsE19zTXtRaw profile type exifXk#)YrxFfhg8$ BG:G=?|Dr EU5)^\:_)̘ߣߌ-)iMqi|;B;wg>ɸSy/թ쳩C'yO|Ly]@1)^s)W쁦d[C9Gi?q~=9_{FΗ#:?}\i"Ah?=gstTqwfH:oqAP77x-14}J{\ފ1)@)k)u,\d@RR2Lܽy3WTa 4l`V)JXiP׬EUZZ^떭Z5fnVڬ死xի7w]BgZ!#2ta }>Lulg_&V]w ev۾!N>N;~ިpj鍚KF/F~ϵ`&?KSB5!2Y,I$d-Ks$eH-43]b&#ؕ(-Z_('SbjCh^ljyufӡ:3e* 7w`R&;h5ҡnwj$p-ĒW*FzC95 I[~FjyÉ n%0QGD: HH>qmUoIVȓqï@RD|%Od &):nObNI@ ~G532 HY.#݀ %n5Q]]~O ]:a᝼QOKPpVtJ*#ߜ1R~3T䠜G4y{J~XB(]ckQq%:i?HKYJܠF`BqACR[W]Bd9ǀeIfWnDN}NC%^Xo";6s.mT-CWa3o {~³Uêk](c@״T&+{1۲"21V ֽS0'7TIӣ.]L=zѽZ] ֽ=m1o?;"bD\+)hn;35?Lu(zcfc$|z8 'Zׅ^uQX뎱r#g/Ecba*5ڲuK=7RӪRq'u6Rw^kGu`9ڊ^joْL曃dzOg69Tfr c25`Ni ͅr1^jLTojhm bI>5ȅN! u`.ܮ ;kUF%V;l,RVɻfUdDn Fu (z7?}))c daYO֊UVUl랟>(qDDnq %Gi+q i9D9ϭ9͝'zzmj]qjF)T^nzsJKQi߈uzpr`#"+D**uś}H)r;_8y8%Z&Z/r[r s9Pi;RgפEsuLy*V Zj5fFF0XWr~cU}П ;cķ9eh?X ֝pYT^ȝ/Vk`9T;C'=wjv7_/wVxKV-"FZI/\p_*m2-]F[VA,Dv=Hk}~R2QEC*7zTFJSCG#V53) Hi=RO;s&N]Pb*͟N`XJkkr欸+]k'/q5M[OU2:Z,\XE&*]ᝒR[\;~LĦTbhNv^f@0*1F&kWMRUqaMG"%FبRLZ[;X8VrU[l*;"-Cj|W3Je%VkdN~"<X$f` ATl06Uuvvlܾb책s +;ZzE0UbWTj>99lڈKR^E, $EQ<%^(L䥚vޑX6 VQbq@Zj/M<;M~XTNO#UJx$ VFyn.̌5fMz^m=#&)'/NW6-)~r%QJYόf:)ߚəv`U`Q^l:u;E*zLevwT#: ssͯB/RJ)q".avdT^==ZqW# f1+Kَ[oʴ;Fb`>VVG#SG/|('jjn (TƄvB⸁%[ KWj0ʳbꙉ[mzu8ےۥ(ni/nn~WkܹG~o|q솟fDX/$n/LOZZ..7V]:>1ZժY8馨C#NL:R5cD)im,$jP̄!ǍKa(?~L{ | k(QWITF/~fjX+`~"gRv쾯n\ϱBiX kRJD||b ZռJI/TR&P`Щ{acdƆj?|Q XbVAۦ;z͏M(? US-/ߘ7Lu8(kEQ7k+"ղ03y}䮧6v$*A} ZZ:Nu';ȩZY]*zR- TL̍v©ꉆ`!`8n,z?+Uv:_9/ HR!6VvnTcZ(RVE3^T<<ר{l,3J듵Tk~erlǫ㣻/Dy^ŭEMe*;a%Yc""VU˳4s# N6>-LXGScQQZ)U⡶JU3όj?QLmWq+Ï>ͥ'ʍ B0@8NED"cTV%֍Jo~KO:l%_qcQ)8[MXxWܕV-ySsPJu_Dxuj7 nam*{9s#ӕj +!DѾw3?4?6-"U4z| #I$ٳ׏W Faku݅t3#vJDi OsGJvjnr6 +h|A+%馛F^- ;#DVKxir}Cl\IZD&6gDkOGظXoYĻ-Z0;nvWlp $-*(FMyQGؘ% V_X"5Ƽ‚dtt  jFQ%=jH9GƚJentr9tT5/G\5VuX~3ڋ'v ЉABij%c(m]ʅ-7?ܞ<0(R:+]9[w]_?1}ˣ"cQ !aC#۹D릌mF֘Z,Tbj5uef>3ώ~lc\;ak:^"pcY-VM6$EGDVTIs.uåt6Z:J? e  ljQDzDM(->k ƶo~7<'L*&ˋ`e}Sn3koZ; [vkM٥AޮL˖>?Ku$jXFm;?n}~<ªSFEVYZG _o^zΩt;ҝ;b]ljD6txw? `_ͩ7ݕ޻qRBt5ۤ^ζ[=nOvl:^+bTT)kQʚfEDXbyn!`YlsM{Luq2FM[_ LZ)c,G[N5ӹ3XXI4ƣj)MQ'O->z)1O^n83^Z;yo/n3V_SԂlUM>|X:5p fܒjq+beZTVD)ZLۻ Ej~|6H&Mq^j$6޲SJ+xr#`Ivەt}YǍ7?km 1W乖 nVĖ/K9A*+ 2I+J'~b{mre-6g׳^- dcKΟͽH6kx'?` ,BwCl қӝzJ+QV#HXKD ۹9tiW~9+񘬱_/G0Uj|0} TKL~pݚ;~d9T/.ou}n,aľ52JDZjYJ5aIԬߋ7mXԌR*Z0;.:pTׂ=4Mɮ;d#Vs'"+kqQo5}ɱ*"C<vUJR&7M9A23o7~s˜r"ZeKLn25r%Bng`|76u5Ēu;6P: ; ;E.fĖ6L:g⏗,os7};2]nIg_X@{[;*e߲fӡ9 ߿}^`7 >۽톽[bJT$Ƽ^ZTu<RCN웸M]r8(u=Z #yopXg}}Gik+LYmTټ;=[wps[~Uh&7<:vb,8DD3t@=m9t}d%=dHy{_dkg~IKD#yxg/w #I]%JۙɁ!љM當KbEI9$j-Drr>$o~YX>PnǑ*:nAz:3.G* Œ0r׺R%'"br!\mڒ2F֎}3Įš䇎Uȿz$kXfJ)kZUJa LʓBt/C02ڪɭc .aI{Jr#~$֠aP`Dg38JQvӖc[yg,RUeuxZ??C*,E'&Wj*Z[$]~(?-<5ȹwQ?}>y#ZbώF+G\~j~S"RiȍH ruoy+'7~#?W.fjftצgrmbDVkJ$wgR8Ϋ]<3kW/~hϦ_kt>U ߋ"aM y9ʪR"Q^2#[iNgʿׇE0{s}ɶ:? $/z ol?xmk]ٛ[o 훼JfeWna1jUVC/ ԧ>n^_[WK L#ӑq09J\ ~A oJOM2AԹ_a@qB<<R<_eRY}wo;܎-'O>{rn[ p_V*ZtxҹKsŹhlduxg4uxi$DFݹ;lF=rӢ`w}-]'슴XJxJ'zK{3glW9 xլ OdbX\mՎҢjjg5]mȨi0@H[ݖvklJ3Pjs^?DXķfœak,p=+U6Vq{6`iVE5kL$kwq|qR?~fˈcpd:|*|cZX\aMܤLw=. ;sJ]k A)ڑ8N,#oP8m U"ʲc`Y PۚxqkZ`,+,m]H˦5D\>- V uc/,z+ww;]ob1"Ŝ}e~/']J`HDSeBjMj8 p}rCSt޲VbAH4_2 /NGMG\a$2#L%3B+dM,zV"nϞxlNkLwzo2􈼱jAk'{ss `  |l;*hع?׻3-nTsF1 p¾]VMU)mG)cvJgwgc7}r?<3`" ޾͈ڕ[h-R}0I)?P&.W{_6rL`+8~(puT6 ht0# ke+_=&.IPǷ.W?[ xnk*mUcB s3ʿs `#=,~l -ssK~LFC)JIƇOW5bG= =9dοp~nM.*%ʋ^U왤ijZl_?؉ p|1+?ɬTf9Z*]x=l< "%wgN?3jنZr#tu بX'pheTҿ}a]y߹gg.`X[)E?Um!Pz5 5 ïO/Zܘv>SؒiLո>`h@spS-]p0F5Tdže^:|9nجuLJO Dcl<028əC݃w*eI5z*x߲bݘ7wb2a)'GM\WC~fv:~OutĒi/ݑbx8bq ,oOڒ_ڪv,\O`(tJakU] kd"]VRT;' aϦG/n ba-"kHwgDD(f2 G;l:B0 x]{)Aw KsSg'vVk(jqH^om?bn,m-X4i`E)QZ[3WǍu,]h gjKF6zjimEzƈYJUfvX ֍5wKA,\56cu-[;gXv 孞kE"`xb8˳ V;`Qx֩(rL ~NY1ڊt6zhk뎾|RTlBvVf8+ZjJf1#/XeEĆ Uͮζu`DTGk#T^dnt ^C ZC0:cV rbE`(&f~^_1lǛznDo熞>4/VC\[XgV?V)qUY X#ǎ"Q$qpu "E0c1.I:ߟ&J6PtU/iޝjtxD`*yWEUFk\?֢m\[xwJMtC:N)q?9g g#p- *~ZີD(תE+`wg\yb|)We,*TdX'oeF !SyEzj1/E?}orX ^̽h<Yk83*V[SA/jF`P.@]u "E0`Uf%ګkH޴n2Mw2D`M#`)eU"3ӕi*v'F6zEkI6zLVbj-QCGy:#Zvpm` u "E0`P.@]u "E0`P.@]u "E0`P.@]u "E0`P.VmX*VATnXkཿ͋%ըw#`Av7<,VWSUn`X`ļ_Qj-XXKPi)VSz ,A9f`w n8-c}`+1X RDqH-1Kฑ3|ꮗ/\w\j.:J[1#HT,z_,Eq3`=[u ̬Z9yJ{,22Fفts>[1~ ܔckX V>~NCkQڊMjHb>0W:V)k^J (Xl\{ Z)j#^ tcv+`ǭ _sÝAbp *VQDK}ʰcâgXyKu "E0`P.@]u "E0`P.@]u "E0`P.@]u "E0`P.@]u "ZkIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_1.0.png000066400000000000000000000640121410275732300235600ustar00rootroot00000000000000PNG  IHDR T=zTXtRaw profile type exifxڭm)s=Bq|_ʞnc{3I PdIR浴R"rKNO{~%Qg?D{EV:!PWR}OezWNtMr>K~OSZ[$V_{-y'{>Dv41v_r޾{+ K}~9?&#:߽ ?!~Q|!%z~=]υ7b{!|?G㨱 b)M Yt9vd9)M`zjitivPtymzS*+/ah&n#yC$7@//ӥ(۸_F7n?~ TA{\yka'Yg=!bmc3  "SrX9 dJO5ݵ,tOMaZi xpZ6bn5X^b/W享g7/^yZsZZ[-5E歶zOPgΙ3Oe;҅L|V6J]=)O=Q  uW8ܿL!WNbb) EBYs]bK$%6i"yK#_-X)?!.trwP[]坅7Q>CkvZ<= 6kV2A%G4g2"FT^̾C9#1kY]Rb C?ZIJGs󡩳\Mul1TCW vֻ&Fs¸gKTQ,6+ h0mط9dc{OZ͝%iU&%:(zWl[^W@whMx(yε ׆6o)DQ◄]:J`zR3i!] "Z[`>jA ff룭 j(aH&d<W2%80x9nY%3fCxMNsKy `mKgAra-+M=b7l'/gt/V 'ڶ$ByBt=9gL3+1ͶFȵBQLtֹURŤ,+Ow-mȺuNhy"ŒJS[o{n20i;[cGְrT |%2Y dQֆƀiˡ$cuS[5ϔIrS\.>WX`iá%)$v;_Bʿi3}OH( Qz_Q4 !堬=.ϐqd nX3{ԅf>πķ!rr|^Y#ĉW2Խ11Y<RU Wͻ. &"qr7'ZX=2IBipbr8۹/-&L )P4`Z+ =7|U'i 0Yy Z|>)j$pLɧTuBD@%^b_eSV f3B8Ésޗ*'\p II} (Eކakf4a X$@9HBX,Rz gí{))`#c6F3r7mAl\*+Agt&l|3n2Шwʹ[PkMT>`m fyFmJj~K Gl㒮&;TP|5*dLMZ[PɑQY܉ejVJ mDJב&J'[+~ 0< 8+q#_Jl݈"ïRBL0o`xgUF-Ƌ8oҘL^ױ\`V@:k7A0iCCPICC profilex}=H@_ӊ" :Yq*BZu0 4$).kŪ "%/)=B4+0hmq1]_@?aXf1'IIt_.Ƴ:s9>xMA <gAMA abKGD pHYsE1tIME;k IDATxwdY.'V]]'0 ,6r%c\@..`lD_l9+gJI陞ιr:iGQ5z~kYNU󜝘uau6޳un:,<{\>p]7C `Yp0e7Xh$rCw ݊*חO2P 8р}&R.*Ys( R700W/p=?< 0iPKAAPJV BlH1kaef&ҐJiJ"S I@hFDആV f):!7˩F}azbBX|2ݷK>0?,$A]DXH"DRBH2)_^I  p*#))XWDBznztKmsBD2ڊ5d8T{VR*n[LVn(ߨ]Ǯ*ɲZgbA3َl~g@`S+iH!̢j2_xkg׃ \띒2Ԉ%ݱD)k e*CTō5m,b&RJ2`)%{R͹r Ba>qRF:* 2|E1E@`ND[jhzRvmcWϴvGmX=Rᘗ,^0EL|Oq~jwFJK/% p )Ū^o6k5KBO;`*$4bF_Gp(ZJ d٧鍵=ӷzt13;i@Ie7-vM%t][}dK*_iҨUG|pT_;^g&5Bk{ Vg&tiKN ?[Y-snVHE ,"Pm_5;Rmb1^=_7㺩ʅusvhlZ[u "3 ^g!Q˖L6_n 0Ijk7{Yg:kCa;2^ 2PAa3ѤC4eh av֕ ](굾"UI+B2ÊXwڿ>ۓ[qǾtI4teH) azXwBNFPt`3{J|8mqlf8 `Hf̒J]Y0Y,8б   a8v .`I/Lo%Է)Ig?M4  I8Ejc5"-{ӥ(ZZzN7~v3-!)_X83Z zNjyMk.譿NjE깙Y2sZ=i哝83Z zNfZsٵt=(u}I1z(\&ғ=jan¨@`"z~Hr(2֖=)ʥDN ZD5\tx];@`>(RL\LJIT&X@l۲յ.C5 v pRi5SlzM/H Ge2uۅ`,_5 0ȠcS6E6A^C 0@+bX=Jߒ4 &eP 7t7Y!Ƃ3OvW-E"oq)ȴX& Ns`[9[C 0r 춎#c EJkZ`VTkodoG=M1Yb]2p'#gwvr3,;SϏڢKKD ‚/bHt-ٖ_L|ұ`(x x+  <"-]+fj}ٹzU.-'1,J15b%}U*s ֌p`( qJ(!j+|?e[ۉVhUR"; 3?5#W>Nd*pYQܑZnчk. gwn&E4`Gb=BVCN[N)͆YNypjDa1}xzlSkfϊ1j##Ⱦ}@`3mq;U"nGcr}O~1&ž+ R*E ȫU#3}Mm8TʯYtfUF;I2;dP_<)|JhtǍ>FHD{q4T~eTEt;fv,MDV}qAuZ@] s~gן`\clDZd c ޙgVj=" ;8*j4IkݦESA+Nhn/?wgffd/6ZhQpN-E>3}Oف\ϕ^$# J0EHJ_%F͊$+%NeQ2GsOE@`3H؂YtpLD?R A|^Ge"L"uu ׉:LDR̤dwߩ10xB- MpvqͦX[d{pn'­}=RRPZ|jqJUEqrsyG Mf)&Vzw,xm kZT[,Gr[XXXY_j@!Zz^'1Tdf?VYeZ]&t9?}k:~󙉘)E 0aYBCW>A?AZz^/AtuTWG^fb!Hdy)A(6j?\PlJ m呡UJ+lH2!ձX *AJaUh m Ӓa]_oDivbóSOFT&'@0+AD™kxfr; \5|nR!Yx'6fE 4<B^`z%g쐗v+U(J9YpZ4L,^x޿sa6}^MnU+2f#6Hi^32lG,ChcG.ġ=}^i -K퓕⁩^Ͱ+bR|G/<{^ݮwAdr<5lԮp eJI2VO-vH\x ŶcbBJ#`) Bi9o7Q 8CľȎ %ƦӤUon6D=+<7BFG(tJIAdOf#_7=m놛0-/aRǦ-A"&i`B?!")YbRAVX-tns`Y1졧SO\Fz̰BjZ|s~[nͳ;+a*K7XSTkdܨq*ۣiLD13}-| 0\_+^oĘsɨIF&4Hi:J""M)L8K;1T `Ngo:'е&~v1,MfDaii``~yaǞI/M+9 gk-OۗgWhV'O2S@+@@ { Wӯ=):cE+$V[ yWDvH%q߽PA8~?nRA4d_'?|_!4%2Kl8cG="^n->͞@j&;BŒB!TZ7el2t :^T`yyclS 3L13Q,]O瓰tPTe CZ3?w͎1Ӣ8wk[-YD:ແH pؗ}Lk>11ާؔafz3CG|higX0$ `v3χcBW,m\յZPzsdZp~lv@`WH)"#d>lo:%c3ۺ)5T*傹L@Plx9>ow CtFFVlDJ 3,RJQ"Iǯ}'Pxx),B1U_~w! _L,%KM?;)Es#o< iIlvEô)*4f= SHJŪZ Mpf=uQ*Bٱ]-i6g\Q޷o@ N+ѕ?kiZ!f+2*0}ݼDZzU(2G ̮`T:G;#)Eį"Ewv4Ҽ;O݊ ޽* Z6gDzOf,!)& bJ2BڞyAƩ~=Hժzn`_-VΥE{2!6D<4Dbbz'(,@ $el| 'A)EJdVL?vc?kU7%͓o IDATt3Zf&2,j'v{v~rP =8QGeZz1JMc0HJEBpGviAتyAmfj#W?TYSuvo˝Le\MVɂni#= e?b)yE1Yvtwvx3+2O G=SkvE~JPCMV/i JD8EZ$"ӡ ü#HhNͥhD*-?퇚8CZ$"f%7[>~/wy LDzqȭyrZuʅx1wawiPjoi`O=ùk_KWkK"z*S[=:F^?vlMpĊ 0sxyJDۤ_qj/݋3u?rTxq@ДL ~5gdb%F28ӑ߬~Q?4;=~a ̣X֩U:z>շD״eL7̟l+[`jtRa. &"ETXfGoRw =<:{NM^IRPD:2yo|:nUc ߚ{@s_UKy#N;55ҭBHWnL^|(7vw՞k6 0dE1azFjwKf#4d}v(iեi! ‰.4jrv¿ ?7s&j@ȉ#ewVDRo6bU)5yBDB5ձ#ٕHV͌w=rm?{*Zrf|-W E?)>.z_{uf?u^_=0HI+9}JYk5͘FD& :}=DZ'^SJZsYd,gUW̎F%RD5=Bwa}f9o}/~v^z Ab{~ogW~~7o^z DStiS8tŹz%>[X\1V-X|%KJi||40Bg̊)%Ɋ ]V\\Y9GI+-ߠm8 י_S-cKkۙ#.D^;≣# 8# ϿH]_!fYe:c?TlFShvzRTB-K@`?*+Dr٣{ly/>l7I)E^{:1V@KYZUo]UDzlA7ܐf%جGcG69;ya"Mh#H ihl5wtڰc$4KL@`yBe GRӠdm]_(PXx}#%QJw k(43Hv$Do$\ϡM RM-Kj} {B H1k4,ңŋX9M02龹  Et ʌ+a5b™.G\8f݂0rsӓRҩO_߹7>~ B//BLwh~#2ٛYZa-Z/命s{bh|%-Zn: VnP2=ߓHhZ`=>̦Qmk,<Eo?9.ʭ7-/0?Kq/T)ըw~4%e9Ii]K?#Ŏo_Kl)c=  za8LD4NCX r+2$"4ˎR6)N .Hl5' Rf9Z}XhhezI+6ߥin$ʶpt6<7ʇ=tU ;R "AĂ^fV2ФWmfeu*cG0@e]+QmY(ʹH]4}vҬ)kedL´bf(,%HJzk^{BkN5{BU@`W߽׵|RIZJҤf-W]6Uoa|Жk?IBt@zYZqvz:XX؋4(fyTسn#'Jw$Of$b 0+Lf2c)Jii) jpqOY/ݟ}>'"{Zy#tkt?\XPB.L[Ne~j趿ܛVhM"(a8C>woCmhhMvt_jMMšA)M JxlDI[fi Hv]k8hV4Q D$Xh4}'\T421lDj _ߔ~.猦9c3&]&5d8-μS CTR~$D8/Ҿ/̰o8ݤ篢u篦DMѹzmwڢQ]\aUV+JQ~Z}]&^So@9ooY#"{OǿNڏR uMB,uwki o)%#{?[ >}}5/wjFB'5K38p4boj8[uMb: ^!9OjGDDiA|XQJ)T NŸ b"x J6cm8!&85>u7Z~w\cWjܾR&S4G)R.B74)V=z1==pt(gzR9cOM }t,@i0?Xg_ |(80)jEp<pBa8 zY*gz6dB7Ld7, 3k߼i%+MIMN~UPp&C_gh ]'tӢD~^f998[*.*TPδ6z^,6*46N7k*'\ <::rM[/L849@2Do]= O0rh(..x7~=*,oahaGIF33kMS~Ј5Ml  4@kS?NHZW-w6{g|R-j"\`v 0 `"" -KS%5Y˛\rK((@gzFw5[mA~|yqyO/FX@`Np]4ϥe?x^鏾_B%T]x7'o kS7xj`ɻ"@kũtud+W} rVHtjHgϝq($@@@+b"҈[Əcbm$6ↁU-m]xo_~Wv Ѯid{W⌺wfĿPP[<-> {FlKtBĜ |5__@S, ?#?NZX)pm]o:'Vf6PQ8QJAh1ufu pǾMD>mۈ&כ5Ut ICWC~M(.2{;-fLXcX5z7~XXӷ{>^(.VK~jN3$1M[ AB9Mj3ғB'/~zƞE61+tMg=>_@*Wu Z()MfZZedH jOf/F7R&eCZ7N UT^W-z߯xBN&'[gU$MWwy jzgJ9u}xo{1{]<'AaRB㖸[/%IfXRۑh= @`WhkhʨGZÎp3ݩ]㲳?fiϷ"sɀ%3ͼ{:8Ι3{|2P  I[AC F-C/RZAҴJEI_MEDI1) D)`/ی\9}]PD3'6o=uڑHBHse0%y:Ĵئ0'uĞѐOxoѵ~sewbzC?jm&D -q^MʹwW״dޅP"_hsxzYWFPBwS} "=ql^+ >`ҕKo^n]])գ?-ݵaY5ټ|mKcq7%RJ}bמ?]5Zو_od۽WK2=:#^ݓ,& ߽SzWƥ4䱪smW\rSQ-rgO}e]j-̸~ƿ&y~>*W`OIݓWb $z6:];6FJhmi{ز4Aq} IDATX0P^Jp>1FDRVX*vZUU_s0(%SGJoݛ* 4jbv2es(Tnb*& a[7opIٌ.o][NQ279-qɴuY[VٖK,K ~h16XUYUNOnɌmWֹqɲJTwOnґB^Jwk`\J# 8vkU>%ʉI*m[6Y& ` PVd36ܯDDTKkg"d`,Tj+|1#"FO]1Y K@Ţ̚QnNO>g@0`j\qd(pN2"-YkClϯZvՒMSoOoճlr(bJeytX嬨J}ЄQu< z-ޛ'q7STo @0RJړi{HJVxB  YV`tþ[I#ň1JTHUke@0R9ԿamRv=jYy!)QJn-<̴`4X_~vw@9MϫB|^/9[Tv9 ug,J)?'f ͅ0>>:O%:+2IJ7@ 7,ܲJJhN0Hʴ-nRAru @C[7H"KHg2=uWndDJ}F+34"-YɩuO}o~[wB0Q;GNNYx)zF%iݴjS?= H{EdXD8feD"mbdv#FmQ]9Vv[~$cJuc;Y N?Њգ]K ϕ9>3n^@R{3:1mgt|(i8q XԔ4}{ɭ^Jk9RDL)jj~l.j!@0.&Q Ol926xQ+5}S F֑Xx3Q(9p;vOq0L>LK(ӑD3~Li U?qթ/>[?ei-[>Ƥ`\j_ٝhnW QH$ xxcpRXN"[79_yXxp;bVyյXc5[X&ձ1$ZUk͊^3G㙾uUC=>D\U"eq ȝ |ڝ̲ =vkK6UDDVz7*zHc8}EvƉ[{o jOy-k=UULe/׮,Nsb1T[suClFg7־ˉʊe^2Sp$f% ܾT[MGoR')6[ E FGb1$ELJDi/#"F@ `@0    `@0  @0  `@0 `@0  `@0 `@0  `@0_4ay-IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_10.0.png000066400000000000000000000436011410275732300236410ustar00rootroot00000000000000PNG  IHDR T=iCCPGIMP built-in sRGB(}=H@_?R*,"␡:Yq*BZu0 4$).kŪ "%/)=ffpP5ȤB.*^Dc@b>'ix{zY}JdO eaoOoZ:}+K 9A$~~3yPbYP㊪Q?yZ= #me4" B:*BVOzH.\0r,ݚ 7)z^lcmv<WZ_k37:ZnM.w']2$G }Skno}>Y*}%^xwowoi rU` pHYsE1zTXtRaw profile type exifXk(Y!r9Y|ެwweOvb 8"ϿO[BִFKO_[~%߭ߵZޗm2h_CcΜoI{zKyB{o:MlmC1PD9%緽18 ~iI+^_ ?}x?`o nh?89v(j|)*t3t@ǔ8jC߽8rG}I+'H!Gs^XbI;VO[˖zZp$p.'Ysvșe-۟4fvk=sօH.P//ӕ(˸_zA7ocuf̍qUj+?G!_R{Y'2ԏ)ivdl:"gz]OvO%iOunA}Wx:(M9eWɤ'pcv%rRJ10M˴ ة( QQ j#wYeN4˸:|ymH-sȓnmh$Ώ1vs nyS?Y50n"9@rmjϫZ<xs9&"7Cٵ^ ,.1Rʮ]UK~=\Z}US:Ql_:T[XuJ0qy?6FҸud<,K`Jpx=^eal<>TGEOm#aK!EK_>+O SddGKleHZ"z d'q8;I"x ꮈryKͳ*V`#8:EWfl";g\qPLoʾ*#5fzTXtRaw profile type iptc=J10 xi7b8@I {x15x?-1hO8Ojzv1Sp#hèYEh0ZU0CiTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmpHr6~ si_#&N+XW\II!G+r\ X.qo}a,`UԙחQ[0gOOMr۳IUS F_uIrT>ilZ"2٭q8[6G|{fLxL.rk!γ_a'IluTv[ ң}ZʋF6Ԙ,Fd).jT|`׶cdM_ZgwZzeIUuъGqܣ6eNjfhM;&lZPS:2_b}>Lge\U=z^lx59PB%i%yYb]эL/3S%yiJ$@~RD#K;"2jZJXD!rI큃Y : /01I9Jr;!! n$\t$Mbh*lz~;LײgnK"Wy]ԛp_T0D 08 Yx+V1rbmi^잢"+M3VfbUcQvCVߑk,Sι7?{ҝ@.(cPх!但ۮ-)))))))*di ߿z 1 IDATxy]G}_9KV[66؀163I2d dd#˼$ y0`Ɋ퓮X#J\0781v׾vh]5*k4W?C`i1:aQZ=EU7ZX7 tkEDkD@RA8|v>.eQˮX/Ӄcꅓg*imКͥGny}2m2VTж9<6T ,a 8 \ށ᭓۞8 u^,YzV~|ODq|],ugלXm$b_5c?į|Whuކn[xEkWnmbk{hC*;./uTəBbA-}5G?R3ۮV~+~X<ѳqoO2Uu<붶f{7ժ@W)qN#+L+ Pkt6li/lj/0X#v>2o"0Ϳ?פn V7{TIZ/R|?ֳ%"Zںw-g)ObCa?Wק>yX *f{Jg{o׺?'~/%I>v/p~"TJ]DĊ:c'U4 $,?7XċOdu rr;rz;7=ߨ W{?x-ѻ)WJ'+IΠjiYnQhG"jFT*-zG쥷B`Jdm=뽟hV_(UYVDDocZNL \DEmJ>ѧb95R"ƈG/7YhU‹Hld9vַFZM 9y6L9nC'#qsmfFJ=[ W?84*1 ԜV"6֊X#AX=Oy 0\%2wb)툣N1IhDVK"k=gݖj+lmDh%\UʁF Unھw7w HDڕV8VT۟_7X N>ܳ!qM$.A)|gþ˃Ҥ2k4^`u~QjN\l֊)̛g=RFˋs|/|7 PVL)5;ay$ n]^6nTJT4!ݭΎH?qn42V)=CxXKCoGUt_ڗy#,ϼ}P6JwF"bڱV_rQ@6JEUTs}4 OV5]t=~ɽtnҡ_EURKóRWy&RODJmL:קz t<)mZ'۳k=}x',5 |ɴ;݈J{ɨK]bt ֢~aLϕQZt'zDd%> G;oJd9YLa`{"?W_/~Obp^VπkZTÂ"5%ܧaa9~wC}ޤlֺ-y2n}ғطF}_Ɍsnh3 Dq%KH&כPwwܷ[G \Kp@;Ek*Nnv&RLMAljHh\sdj&k}4X:Gw|m}h\%fJK9OM8^y5cCX+e<Nj"ټyť!0\JЇ˴;.-+ZurSOx5.J)1ϊ#bm"TSTW~ 8O؞R*#|ih-{M""Z[uViFE !0Jnj뉺TSGLJ:>JEvZ &o 0,Z\ņ Pى1׭7p~ƊՎtf"0,[nj5TlZ+TL?47>/v浜ZxXB *@`Y~M s%XرOӓ;C ]m.(kCKh&N{ʵJkgaZ+C_ɩkN(})}e0ֻ!lh\2a`v ZdH3{5×őBeBՀӊ3o5xN t~SэH#X˞c|Vk-7VU<."Gɶ^ӧybcSO{#|[)]W}SA҃V0۝7%CK~s4Z^$)şybfjHe!O@CZG94N((:8~cֳS&f#t#o]wbFўGf&y[j-Z-̷/KkN5eD$fۆFO\wDI伳VLX ˓yK,""rh,ﴫ*%V~fnk:n57|RRg\iUjTL?-6OQ6d0jyOlYsVX}޶jQ-DcjIRD_Ba^ 26?e"q%DRr[4d]}϶2-~o4JweV\$29<6;k=Q)u_Ɋ*pfp~sϾ}o ݐ͸1L|t:]zɉMwK$: h̴Db㛧_VҢ[;vnqȺ^_[7!)]#"فAJL,| 87{!S}HuX1$Kg (%q쩭WL;JU*ɢF#0D-0 㜽ckz?, u]r5uե0Tf)m(%*]|k-Th!i 0goggcȵp]9hmYALZ\DZm=7h >3 g?-;_Nd]q\֊؋xٳmU&0XJpZvs{"sD{{=7o!.U-jïs-{SQAP{^>i) l̦TQc I[nw^ײLWѮy;p!o^D_۳mfǑH{C_WoxL/+8vviiڳ'nkL&Rp;?tH4B(=UXs3ÇOdЯ%(BpTf{Oij C#R]r`^d?ޠ! xY{m,.SwB>:vdkЗRn75kf&#n2DbuR6 į,)0|_ܑj۴KZiBpAo]yսZC]ʼn+yq5[:8WZ6SOxO7t$EOt$h҈V,y޿3ݷcWuӋE, @`9^Hx;?Wh-Y+f~66W71s_WBaO_WEdЇ0굨Z;ymnKwmm;ʵb)WhN7i-nv1&SVZ%Gy/ S/Oo{iX.|T/DdDD3 8 uX-KDD *L<:鱭ʕXmE%"Jv'[5/;~ޘܺ98kŐV""r"w rhz!+9mG֔mR{ZNWN\8}5;7ǖ~#7&;hvC`|wŹGR g!Q~hV&wlM6G@#߿%ٵeG/k(k^yOУծw[ERZՃ߽>۽xK_M1yUrggh")7bV5u6Kol&{;IDATR)l^ XneͶ2kvx8y+\]vj _bE`P@]uE`PWj}\E`P@]uE`P@]uE`UEk)K@`P@],SXbV'X w;?]8ebD @`Eqx} "p 0)gp@]uE`P@]uE`UZV B_XuE`@c)Qu#qQZ#ZL-4T$2uELBTj-+HUF-nR1B|X5 h(kݰZIN&ƻ? i>޵u]y]mh 0ZwoQ셮UʨBB!~k-}e>;W;Zj@`@iaADDkJܱ>Tņ^U)aP c7;%t,dk2 FKȖm5n1ՀU6L?{y*kDj:cn^`p(^,V){担5\8+-EXUXS5FWeI* V1FH"Qn¤8 3 XyHzaXpd*`5 0`"J\kHŘXtp+N;Ne'3x-/Ei+BnXi0tLk;5fGRǰ 2*\j'LaX XAZ[j%7*H~.hxG2=9{zW\?^-ikUvᩇ~˕h ^tu#0Xmgwv̥C6C77;QʯY8c@GSήk7<u_dvu9۾% L~h~~s(޵na3W>Ylm߹-.f3A>eLUR[aldcӥ \d~npql3k외an}lvF^| :N1A$Vcyz5\Wց^jR:sR'}]7u9shsA`E m1%쀔]dSjk8r$\BOlܚH)nNPw-iMs7Ց@7Xb4UǞ|_ndW+fp)|SKmzfohT)EDyX2aP@]uE`P@]u2xRRi^WnqFGM}Fu]V֜K1AؓSMeĻ6ۂbrf6z"=g&řɋ|U%IX6-oLu RU*'ʨemtv%ieTeO$66FӟY*QK "Aep; ۔7a蘓!CQUs r^I('Ht&!ꊜ KRKjF ׎1N[+ҥjI_)V2%{sҚRڞ1`1n(l"nU6j9RYL}KStMT.=?U)% d #~dV[%% '9VRaHMg9n1UBڛ c, K@`@)㊛zjOnMܺ f:9 Y3 /ä-Qo,zNTf&_q$ (jb"V(%Olk}a[[ĶC9*zY.7b[}5;t?E#J/<M`X$NO.Rz&ֵpruǔcVF)Zj\D)NJ}\3z_ӕ͇KΜg+Z[|D) Y쪺$ J)'=v=*jŘHײBd$:+tumԋ7R pj5?UF*UrVkw.gm$0=XƃΕpYVl)Mb#r9G04 ٩#{cB#5'%R.chG aa@iGo5Lu>5390&JYBstөFY*x3.䵶l$\ln!sdngZKspyQ"z]h"./D&t(\h2.+JDBpPJZVs#ٓa8k_wwՂ mՄbE/Vl "baFC R>1nR/Lwje@`@uxqGvvH,̊UljkHZL2XLs=ʇKy(km$<*ˁ"M]o[^7m vtG9ϛKݽG^29c+-Wj{l=ω8bSց֒ GfadddddB[2[IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_10.5.png000066400000000000000000000014071410275732300236440ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<]PLTEpFtI}OzLOSYU#nErHyMvJrGxKQ~NuI|LSPpEvIN}Ksu4tRNS _:gSퟸQbKGDr + pHYsE1IIDATx[P$DEmv,׾%Lcq٭7 {@B:; Z dg`<!4a{;BVmbe;TZQwd(H,JK34-rH \wk10I 'Br6G pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/ IDATxiW~9rVDR"E--"w[glt&dA8 ~t00pf ht0vIFio;vzHTܪX k_?sN^TS(^Ⱥھt ͪ{_w`yݑ'=G?߻]5fޭzܿ>]5l\-D`@K-'Lk"0h% Z"0h%9]D`@K-D`ݳM@K-D`@K-D`@KTJ֏DnW?uD'fvdۮR~ Kώv|nlӠRn[mw˹t3nʭ +%%7(ez8 8(7_y+rjF·O֝dhDӟ;1tgz&Fhb$Wk~8/ToFlwZ74^͗:k/S(|J鬎twtGĤM#Z&uKwvn6jN# Mc=swWT_#չRRw+}N Dׂh]$:G{ ӧT+j%G ㉟6I.l vS߯NK'愵bDvRL)%tԝðpfJCWgoԺk9MD6 |>ΜJw)5+йլU82Dj@GW?VkL*xPb{`Ў0D8 mj`,r=(h k(%*:GNbܙ[Y:<ѝTKZ\?l4V}tR1}v~a#1tJnnKi]=3r70yopСg&Zԋ؏fmVW jll^ZQ'Uv׵WYkE=l]Um[mjHw623sZ%^h4jXԲ2K`+w3:#vةλ_kKRӞL1cIe*CLyGMag3TǪvu,UZglfkѕXB1Bŷ;72]s܈xGw8ۤbZZZkԒ0Cm͇- %ΗaKulaN4~Vgc TKkUETآaTr1]=rsuz% rq#zl$OGOzu Zk\׺((e%h ̭ /TKssWU&kRAd"9tgN;栵?-BV7 =QƺQ^ *ً+OVE C5W uq$y\<"ͺTsc&rGF7l>ssn+eQHg֨:vyDw_\.~,h1V T~k2h։Eac=6;vn=h'ա7b v D+N<%SfgWa7\n(D$tV57tzr"UbKxjٵF#kRZ9Q[<1 .krW\u#]ncX1[\)/#r'4eXmɥtg|oghس<:_X(W'.M\zOK۪`KLMMç/(/vIJ7{IvvW2՞jљGZ e*%Jkmt$jyX[.wfnON^[VuF5V[A[8RW h 23OE5OZ)#_wu~̝֬D{Fg(G~y^io/w(U+eW-jK>% 꺶6-^z/?y꿫n = >OddP;]_bY+Ƙ`QjkC1իNqLRi_ZYm44M̔\9'ߜO*܋nᛦM**ʹ.Uqj[~T̻#qVֈ"]/bG4w轠ah֊-:ff$ilX~?%oOCIk𯄙bO<>AQ*f ڑDْ,J|w=աhV)= MQ"Z[m2Z4竔HY8ӳ|>s?&>PnZ)9[뻽4Jqh5njqBE_Y6^Tk5U/̗K7.֯{Vx,Iy뭷ByKr";Ʃ>rh/uxbTpdd/[~Lw$:쁡#o:ԙvcj9Ԩ%X4RV}%ZΞơZPղRJٛ'NՆ4HHX&rnћK數DQ_&~{ۉX+RxkՁKFL:sŸu?v0}Ajƈqig\)n$0I$Gg:E(R.]yz3vk偢JռzI"|% 4k߿0qo0`9WfD$ "M\^+FW-YIw.|!zEV燙ܱT;=;߫TdKuQ7<}_ȟ(y0RQ9^Y81H aW1☰QZ)-LGCf}$le+~k^ GE`oZe&kʱF&cӬV&=/&SեU (HVya[jcmo3/S{[-gX=zf:{ϽS?ChE>ux<5YYi?_ZqOC`4Q]ʉl~kmח_e)cm]cmj;pc'.B@9Շ;Y+Q_ϼ8518;ul>̜懖7. )/\e9߾]> ;(:vkbaԌwW?(((emm,tu xzpdsC"07jnis7_Ox')QAj++kS]}6i عܦ'->bwop*]jÞocVqMl`d;\ܸJFO,4X|T`|mŋonA`6V71`t;!Xejyy3ށJ[E<jjKW_Wm9q㘘r¦SsGN\3WZFfxva(Jw;j%R_ϝ[E ?][ژZ/aw]=H5wҕWxvߡmO`PN:|iaZ1咿X̹]=Gf7F_M|o KKWm  qlWZiݎk9N{O(-p=+jlu*X=֨nN& tP^"KG`sJRnvQ'ݏ2E**;nߺERH$c'wHFi4R<_Xzٷ=/;`  qUaPjyVDk8nL fW4E9xQώ[qF=Dd ˫Avݛwg8ɸ ݮ%IJ|hx%֊4nrn~2*t،5R)1[kMV3~;9,a&ҎR-Ϫj[dVNVƖ] ~#lkά/E$j6zFX!]YJvjpM|  qzVw4z(rȭG춈 &0y;jyQ͎=`nZ?v?ZaV?ܹ=8wv\Qge\_9<47\z1*׼B4Zpy=8\rAyҹ  qTT͎R翹(<[ĔMQ,EQMޞr'v:#JIt(5Ԩ.((S5Zo8<{€yHIDAT r`^,CzH!h׸%jG'l~وH{Q͗k4 b/Om]xvjô2wڑH:cFaēn)""7k]+/jnʈ5*s䉌/v($:+] #߈)KeF:}\Hu(hOǞyFѶ,ZkTT] &sg;+x ;J]jSlGRs-fum:v?u_=?NZnt(\7&HrT&msmzruKo{^ڵG>C`Ns|D`0IueVM_^޵ʟR "0`'qǍi{Z)mFU+g'J;r 1OŬvc1{ j:7]y+ '$ 1C1mlLiH`cxƺVi4j Xn/^o|eiqJ㫉74b{lrª)6Voߪ,]0?XێtV ǵ UV9n94Znn|ٷ߬m_{;F"S%VDT29=1tf\yTi~0ؼ )t<O{\]1\WGġz7ϟX~P-WK>X޸=.x? 0`G:t_XHd*иQvىzP!m-;RXuv{Sr|'2ݱTpdFHx I,-Ogo]Z8s!0`G_]+. T;MvYvʭ˕kam;?nQ;oMx*g]}\ ;jn5tyNY;vٷ='"!l; ,-(Kc Z"0h% Z"0h% Z"0`17}v  Z"0h% Z"0h% ]nA`@K-D`@K-D`@K-D`@K+KN5&-D`@KvZXQ[##֪'p 0`ߋQQ95+y}wFuRߧ= URz_Kv7cݦDsןon=ډ}ZQZ0;ֲ<EX03='~bU16DŽFqۧ`I[W'dU Al~ʨΞ޾ՕCs챕m*sW=JLsܮV~|A7xc^v-0`qDDUU0.e$s# O]j[^[[9:Fim?yV>D`U   Z"0h% Z"0h%%& "6ŗ v-8{-/N\oV뻩S#/%݆=g=g/f<"" tC`ǿV˿~,[]C5(6Dѧz{9ʵWPZhYYVk iƒ'q;'j}7$ ""F2p?U`g- w<oQWĬrx vI~LOv '݂<7z/lwY{Oǎ{_yP,~yl~}%(2J Xk0*iZ=Sd*SWDOLw~|>T!6܏qac67{l-ͭ/8]T`oӕJg.W<5QI&fzŅ@n غ{ܘ_*%\^9)'R0.n5CFuPo~Uc.rcuU-)mVTD`vR85׌=mjJ2%\N}$Rd؝bLMElkM㍼_fg-"az"L-kb] ː4m`$l&\&_Iu\;Z*+/KZDDg+i6:∘z-D9a^c$ǔx& {A`DхX,M? ".hqĄ}?Ͱ Nikj.Gu6땎Fy}G=`Dk!,܇%IWZ`Q֘;$1l*3kH>\֏v<&eJC/ rܥ誻W0I9VO-0H]Y V핓Fd_w7t}mcd{jz6̈d8~K 33#O_>?|3_\X>\Pֵ{Sy\תrhŃ?9#%BZD`֡qyXޚ_!0`q\l@K-D`@K-qI4B%*mIDv`3ysmEHE7WVvv fXQL!s <ǝw &ҒT~Y I/REZ%"z?na63W_h6lw:a)ͱlͽğ$M*eEDLhtn QPꂑ\=?HL(*kED}F1k{vIҢ2wIQ9-;7(h|P\T~z{bh'%r_~3{Owݼ x|JlP]+,c {6ZjeSZ|juiNdDG|KG^$u,lս.-^'?{sW,E}u}Ic3JiDE[dUZ[(.N\;f7b_VV*Z'؂+xR[}{ܷw½aU)Fs? 0,ZT]-WnnwI%I@S\~oֶ͠U]N]}vY]F5?yny٥s bIZKh++Mkg{: fi-ZAoj,/\zkם ` TW'j7/NVai': f(QT6uaVv#0KgzvIvcI8oݔ{8a5*W5 ﵳB`J={3J{*D`@K-D`@K-D`@K?M:rڕLIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_12.0.png000066400000000000000000000176641410275732300236550ustar00rootroot00000000000000PNG  IHDR T=iCCPsRGBc``<L y%EAN Q H 17`d`v D20\ ,aǣ,Z?H:b'A vyIA b'@39>@B:; Z dg`<!4a{;BVmbe;TZQwd(H,JK34-rH \wk10I 'Br6G pHYsE1tEXtSoftwarewww.inkscape.org<%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/IDATxُ_as-Ù2)ڨͲENty0ڠ(M-ڢ@yk_MY,Kek1QpξwOhٲ+Yg~=vs91[)x>U_> KS2xje !݃|`u;؛yck==õjΕ/l@C n-ն޽Nمk9v^xR'TZ:TZz꽇·|C E!+JcK@Oϓ!- ;T^sO=?u>u`D7ߺmjưUB%k>JWBm`oڳsL* >`vR7vSo ;l6HQRU ֭`] 1f[r`J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `J `bq*=ǾU?~ V7fHiW|y/ >}įծ;Xc+V|w6Y3vk[;J BF E57[eW<7l @) @) @) @)l`)RQ)B,b7?_ ESJYY{=30tB䵫DzL{'`_󽣯z^Z5b!R =z˿==9r(ڻfGNN~ҢA0{1Zu60rGg&BC!fc\̾CN Ջߘz>"b#=ccgן|ڥ[ggȳfg)OiƋ<.v][BCa>R,#,NMi}o>I"dRYv L ,W&䡛YɚYx'z (hER{/>;0u_bl5>I ܅,K15VS߬ӓ14>o(7`C8z!dY8RBL,W=1,m\R^eY~n{/YMy{“?i!Pm4Z*  B-Tj-{.,-/-o"!BՅj[b{,[1jڇ{Y#~e7>v >ZBlӣLBX{y#o|y^|+Y˛I/z^>xɛ:Ξ宥Eҩ[Z&{Ɵ_X-|7x›y;?!,K˳=7ߚv J񡁑Gݼ~ߥc7nbYHR]tvڛRz&OϵLp`8|}G̋8y/>ťՕ۟VR~ƒ/\~+k}K۵`*RLZk#n Eumj}_Ѻv\>_R+7ll%) !Y\q^Kl:[,f䙯}/|x$eRvٱO4;}s~~saw6Ǐ>`m[#O698<:ΫC1۲e RLDHY{恼c; Rf&_Ag#'T ([ `,-zV= duu~BR! !dY1/BHYZX84 7={?(R ! ͼX]ˋe߱JJj}zm/UۺV7{k,Y69ynCy**Yh6cBy5vjX^?gϮn]" \mh=oPZ:[z~߾/lĀ`]ٌEGޣ'GN[[ǻ"B!+Z:~PaCv KļN_quOV=Y~vO+kG?DEֵ(b'=&\OvtMtwv^w"fY),J#Ĭ{rzՅ{``1fJlfЅZWj.zZ1x;)^kNL_{}yK ERL\}+vmavjkW+)]?V./\O5 `ɲW. c+YZbe:ԏ\ynn%`W*B&FHJמÕճ!pnb$"f3/x{!=kC'8_?Ub;{z9\??1puا=;3[k]$}^l;_?O>ߜ>t3!}{1ZBLݭ'/-vf7S Z҇ d!t uL|vS_֕l>_0WW*Ykg_n.f-M}ZVfnɕ Yh6ccc'FOH[Bۯ{7fzoĹowa1F0,[_߳\K{&[:ZZgBBN?b!;ZQĔ-vqcgmmܡ^FV]-ΎNgq򃇷m;U,bwߥX]j]rɗk˩Y+<B*1M:2A0T1wNv9ܳC&,η^1~ʞ,O1,tVaS&Bv,Kqyk?0sjֵe1{ǖ] +)4fFoG~vxKR3[93 "/VVzϯuΧX{XEh4.ԫ^y(*?[5hE<cY9607obymv3n YzBb?ӏFPcms6a]PmN8t!Ʒ&'Y N0.TR?561~j,b7Mf|(~vp[CQM9A0.F,5E!Y³=w)B] `j"w6vKk]U?r=Cj+y>2:Yb5;;:?;}1u6FN|kBsq~sia,p5)BQ]x]>t~iih&6BȲ-)eBLvU eYK KC !o#`KR#Mؼv; @) e(b*˟ZRFg ó!ef`5bsnJ3ON[0:}{p$f!)bL|6zœmSqKG&Bm $LGyśyTfZHoD-͍09?􃕖ڽ~V̖+c|ڙ yּYcȉ8ԧZFڲ":_G;+!4ڟ3ld䱶S}m,eY͵իO277xccؔ+|Wy`%oBibׯ8~9gl.K0G=?Yi뮆syȏk`xt}ZG[7$`c_|gw^i@,v!>SO?>xbRo>{Q,bwc6U/vm5 /ڇOZ:*!}غ,E3_r>}?ZY i=sSvO?1ؖʇ@ iqD3w~?oiҽC#6_83Պ:H-׾[=W]ȚimSG]/`d䱶DKp=ɩk+g+¹H Yvsk^?.x7l>qޓoSH n|cmxw8|oзýs={Nni믇tS 43uZwߥ[E3[]^?Jb|e #}~9+gާZbɷ7תF>:+[`uxWϴu Ե48rH֍W| E#{Hj/~j͋}cVcXˏ֭OOǗy-oxC 5RO>7ό:Blik Mol5+,K[ "Eǻkŕw8W}+,ŬXm?VC}FD6Ml}|K-knm5_~ukZ,uB3buh1K!j^kͳA0+JjFx}xtcx~+om*dYXK7]Yp.ӟzюt di aR޸pڃ=kkaeqtZuuROz?W0(S|ni[TzxF:_|S͖jڎX*cK^BGh~!VW7>MPٰSٞoKywf4y;pv~Õj޷n9n]xqv+)Ϛ}BC{|F X"ރg3PZnc aq!]XߜWw^IuE5uv\>bQi6BYܼtgno3 N)[K+C^y}]7F>ѵ/Sunʅ7Q4Z-v NYX[zfo'=ٵXԖfgMͼ؜G6`{R<ϲXY̫W:&ov,d5B /By,~N0~o6ePJ0PJ0GRkz˕iYl 봴ܷSLYcf ! ,$`MB# ={$X"6ShǑcVK1U>!1˫= ![o-ͽ9_m Pz}}?Փď`ηGVswg+]z4;`zQk`El @) @) @) @) @)r +bIENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_12.75.png000066400000000000000000000015431410275732300237360ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<PLTE`@wI|KvHjAU6nCsFmFaF^@tGyIyIsFh@dA~NPPP}LnChBRPqERPgAQTTTOpEX8qEwHwHwHpGcFUU~މ,tRNS$#z~ +FEF, -wbKGD.T pHYsE1gIDATxӇ@ALbD}oO -f.I?VQiDo6_rVm!nf83Tr)AgU%^ׯ Jq{( W%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_13.0.png000066400000000000000000000016171410275732300236450ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<PLTE1A@.d?R(76%[8NRRQ{L0]6PN ]6PN"PTUUSM a<{JNO~MsF AvGzJ|LyJlBTUUSUT矋-tRNS oþ=SRP P,;UfbKGD37|^ pHYsE1IDATxIrAQ@Q'}DHc3@;g r6CI VMjARW5v bLzAkFc=0 `0f3 `0vt/+=zDs<=m3%զ%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_2.0.png000066400000000000000000000445631410275732300235720ustar00rootroot00000000000000PNG  IHDR T=iCCPGIMP built-in sRGB(}=H@߶8A!CuтTGB*ZUKIC(Y:8*? NN.RwIEw}U=YF&rU! Ɛωb>ywݟ#LYs'tAG.q.9Q#' . x8s.+8:kߓ0\VNk),b "Ȩ*,iH1U#jP!9~?[8pI b#@hh5lض['@:Z$bG@6pq=r|%Cr-7偁[o[@ze{oִrD pHYsE1zTXtRaw profile type exifXi$)s98b{on0ǟZ=!qVd&?>_\)ZUzɩX1[kZDyEW)N~𱆌C{I= ]9QYnjWfnuIZN\mC1rJ;KϳI?@eQ~\kG~{lY6 ύ_lq޿sV;gNb_Çu:La)u{ݢ S$P9A,q9rd%d)͔-4ũ[N ,gJN_"ϺYoJc%tMdzwpμ&kLz۸'D7} qz]`3c=CoL?|[ 0k+ JV-% \QMMsMRKwmƘ<}n3J4U?V>䚵jU\KZKrnيU3k[niZkyO=Ákz)8 9s9FeF}}f:f Xuj/6L]|Sv/Q uh fSȥX*v,6)%].fpԋMXr²%/}Ep ~ +…\quun>4fyHͯKVtk9r tgORIbzWQe{g`_Ce}tYgEiŇH>+W?HYf!U2%n٠imV>U-~s-D4a!׵IHQDTJ2 lg$;3Us8ub=ic51Ҵ?5J{؄4Tjh\' LuRS\C0]K:XAw/꫶fǴzҡjEPH^c*2"uh'~B,T?&jĺ1s-yvhlsl/?>1\KV~7}l M4 i+6IY{bQ9q6LAԐ uz-mV=C+0O]Irk 9Bɦc(nk U ;4u[MW>ӻ)Q[E"ƁPZD&w\,sf,QoWaߪXr]OWΌm|R~k{ne&RGSs\>UVŪZs sMBV/8TÒ7Dd|Z\`,'U[Id%x2<ڏ cF@E5/xDtjxZp{cx}nA_BHbq+6).b[8sgOca"+Lr(q/K/)8?U_N@ bBP3FPO\K2$soS`H멜#vG4Dm'"䊼oxI *ˆLi{m:+Ag/kGp>܈@N2VHcQ͵DŽUH@F+7\LdRv&zHpϤq)^J.-f/g2^DF,k[ 514qh.E+Gr ˘plT sG9ŵ7@*%OHz;ٸztY@+Li{PDؐ$?Y^=zfe蕏Xא*;*%ρxoJH'٥ObhȏK·7kT~~]ި|:ʷ9x}g3?iNd-3䪉9"<5t@&26)]!|#?K>ͲH7czTXtRaw profile type iptc= 0>oaIAGI[,=M攗KzԬH4#HG[TmBx]o7/iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmpHr6~ i1vX݂( dR~.Hy,Stt!iC;w}CFWy4ry h.:${@#f{{6lJ.їE}bVV28W W V F(.{蝹l-Z' -WG{m8m_=J"bN ]zˠL}>˸F{ ꩒ѽوBkHKp|:Z*f/s@jX?"ߏEzb>|dY j^T(cc p]`D>=!čUjb: #B38Dl302GF [ 2Ey_ yɗ f{a臁9~Q_DrѪ6P[+"QٓdaSg_Nd-H́a .뚒3mKgEZwr.dWq?,PݭO'rYRQ C!|p>38ݮzCgχYnȹ8WdrF٪f-ohW#:jƞJe\ý wޥwR/z e lV IDATxw\W}9Lߙ&V-Y+)Z#|G~_囐| ?@%..Y,kշ2}`ZKڝv_՝s>3=M 5OK-X=.&05\k)f\Ƕmj7lE`0%)L`JS"0 D`0%)L`JS"0.0Xbl=N~ e (A~ (cjPRaupS]`Xߪdjq\D2""RDvcEJ:k|߆go8[5-ލc*0["^!}{~Wִo8ٳ]`~#X,9n+S "m Ժ_85c1FLPzd=8sL`JS"0 D`0%)L`Jl[e-H(c6J)f> DDJV` 1MK^)\Y!/L&l.ɏ/6&E`Ԅ1 Lي:%):gkP!`weGvoٶ|k +#?ZR XsWp, Ec9z}V>vmyC}ܲ^j@v,4stuM9QP<;Φ[M$&1V_gjkCEk}_tΥeKCa1Fv2Œ#]WܻC(10@`DckPHVQ;K '$d}f "m\%+%KW\N,# v& D}ێv$h&L0,DHOB aoHeJ;ֿsN.J.QXZXvS#)Ժ~ }Ѧ֑E+BWzɮWJHBv#EҖ?8RZNc3gʦS0oR"4V: z_R*^YS1`߿X/G`@5vۏj &e8ted`od}WG`TUCdk}OJ}ىQkPU.8Xr JDc[l>l$T|n=@ 1 'j)-Q?҅[,^qa]2X[m/AJ岝 W*R&wG#}0vR`#09vm5J{g;_"<95^1RaJo.vso<ܼcUEu0%An= 0TGvOEatxcs$yAtĖȎV 8P5Ӎ D EF,p"ݹoSƼrxJZܰ\." V8P5Dh\%QJt4^Xмp༺tݲ{)eTKպnP5n~-c+5=H)۬k޵׶VRTRNE$t,qVd7 t;ǛP./I6WDtiX*Zk1뢆Uu MeK:vP+@}7v,KαubJlGl U"h*Lqh?V]=QIr##"ԼHL'gZ'0% PQړL6Q59\ `O1WZ.i϶Uӻ)X^~߷^ny8\jZ myUoXkը =fgཏ 85;n˞}br?ߝ77VH$aZz~5͸ bAuFΡ|eKE 6e픧;mF'?Xxܼm2㡰Zdɯ?I/SWZam.v%ltIՂh\nH v 9 +ϿaHL]`;*Rɶe۪a k/ZU-Z`>"0jĆWlH.m)DH}]:?Uˢ xczs5/ܺy6#^RR咙٢G)5;azgG} sP3[.[ǭtWrJf$obD w;elH-jP3t-_I/p>=EϧEȱ}^PjX5VP7_#Z_Dl[D9 v;?^qAp 0jA{iCF>3F=1-zL9 KKEp`](YѦES`Pu8ꚛb ɇ\gĈWdǽǞ棇g*8cUosjV2ƈ:}Y?7.C=n~9𳟍U z_te^}8T+u+/Ϫ|# OszK{gk,[^vک2FL(/39J@$@l[)#NP܂en8⧴ :w;1q6>ZV}\ǣ@lwώoXeٶ^e&,myXe&Fކ]+-bbGDcC5nZ{Nvx o ];݄* 4P7 sPU~نK9XkDbT_k ޳&F'P"JHQk]w^̮o}dtpegؐ-F%.˴BF#*I P 52se{Wx- 2r\'*ѮgtC*IمZ@}K7]קNHͱ]|Z+(9v_  y=16=T,G_r.e`馑5H^+#e75} XĨ={br;n׫.ha~㚕VJE9Ցfs3P5-I5;H mIrlWٌ=8ҟޕݡ6-8..q?l2kl:p^±ձNDX,ѯ6R"c.ydL#m L0!Ft:|_d[Ό?'g.*~o_&k,KTTgP9Z,u`u-2A$V̵dٖ)*膅#AL޷쑝 j? XK?xiC!zIGUֱ'ZUû}XU*אO$v,*chd,^TXHYvaq`Vp#ln8{g}hl]# c/=qMwjk/m㖲Ⱥl~P$1-/3r]l imBNHl:%#{2?|my۵VcVDc$;a{U. u9(mHx.=>sj22>6P] PV}r@Ymㆣdwe8Ύ-t"uζH4_Oz Z9(˖`-3۵@1OosKsS# жDQȁDW);)Xfۆʥ|.xʛEM.zVj\-. f04mXT)-]lM剤iZۺ8Էa bJ(Qb|~7澶HK)} y(dMWV~+{-b;9% P|>[͋Œ+Gu{^RJ:MK d);Hǡ \2ke#)T\򡰗W>2Foف{Vu1NncD&F=ý1-JM]n,䲅J}>p 0+t[Wv\i\,"FR?p%AXot7.#/t7#A]rѦ=kCM ͝祛YXAA FSvR'lI3226?4U7>ymhZ֝m("lHIe^(1}Wdk<ƾ\|loѕCU]cwmB.>06۵PfeҾ?l-.DhD?;BX0jou-[DAJpT˥ EDDt]PF1S"]ٰ1 W;gN$YQڍZj~p!0jÝCK/:7\sP.[7./\QhAe|ꓻhOhOcZd*ehSkDȘW,fGh9׶46Ea|3-vzVv_m/d3큎Sm7u-rmKW56ww{&FZד[*u:ӐNm = }hԉFlGmKJ9pȯ}ƫܒHV'$*5T[zo.c;Zqw#w|do|s9XR]5yOxT qgў|,_7f+O4EY'Y߽((O| >oEΰS 0}oH*Sфv&w0}Sym)I$e)D.{e?s3}Sͯ& J>֖06/i|gˆ*wiyЊJ)5frةv~n(iQyq&B+e7)O^H 7nln9Rꥃ )&BVv gRpTo s '=q9|qNѐQb$˺V^i%^Y 9whxyHsWfl`P7H$:qIDATӋpa}j'ʞ*w;w{ȆHyA)-֋w@ޙ}j00MVQʖɹ@ɮm54.׋؁We'Fվ߽e?|eJL#J j$J k_*\f"Y*GS #1A+cH$ۖƈVvRR*'խ+ԇ:2"B`SD`y7t mctpR:AgD)%7,rY0`?P]OmWxec(&ON{ImicGl Ebi!-*ѓbi-FIb[ܰ0&Q5 #nQ]l\&rͤ P^f<ܥTiȋ?n(KTfry轏ϠKwX~jm 0b ӈN ىhoK{<2` vv}OP5u0%Nh'pw}fF8۰pl8ؕx_l;74miݺ@@l7xclg#F`;{|U+6y^p`y˲Wa>()l?NG]|cF[JW unٮ67~[ι8זJIH[_(ODIJ%y۔,Kh"RW߹ptx]r40mrŢ7WJ-TJR^FYP}w.l-2FiK}MpU"&~f"{tAm 9s>=ۥنx~w;vwޝhlz$\Ho릻?=?I-o =&|ۑPv&wn.NYօ_M7E7EҢr1R[c]Oظ[vEpapR#==ũэw_ҿ(dՀ(h;R*u0(q \F?]Y ΐ'@}_|9wVu9])$:kg 8;1t'b-{{vizPx47a^u2a:4L55 %J$7Z*=8:$ˇC[Wuaw?}Co~68?_`"0j߿~pr/ R D`Ԗ+Gr&zߓ`۾.~i(jkz' +z?UVo 3B#6n*BxRN;Jc[m0C>2Kg4G"/J#x# nԟǓz֧RJ$D Y32ǽ:=ǚ&{ oνt 8h/ш ˲F'CZ/ށ^r|cܿzV87l &=p(ooW]C`GvX|*˴!Ti'L@"@TRjܱ/}m.5&pd.Ȅ靷 "&""TJ% P3K.X5jmlc&9KcxeɴnXuЎwl]d}f51)iK~:KM~?VMKΩJS5a-ݤ\נW9'dF<_ 'B`ĞŇZWd:ϾoJ=-}"Ӎ@Ml>P\V^&Vr:1o{'܏U8wAiM(23ǔ$@M-du_lB^DcJ~;o}gzt$! f1+QXH |zT]ݷ2UNPqXvbgAl} wƊ8eLIT\$*ԜKS 8 @E}+7&3Ijƣ ""bq'u͕hp8 PQsb PD5)5yLSJ㔣\젶.#hl:յܕO~!oyݫض+qצmP9Xt::X٪S!0*Ggι܏PXmPzAr]usޞ[\٢S!0f27vկ{.,fbx)˶ zݍK?+SzD`Tݕ~nX]a93^ϠñbK6\Ӫ%r*@iˋj˱e)щT5/e5 »_']{O?d{FUsq}VJPX%1 +TKkƆ_7)}JPuZ}ij֋x>twM:evC*nQY~-[pk->g镭jcGXaJ{V6;z*U1үqêR}#uBR:lTEuP" Jo-R*5>T+ ټwpZ.1⯻abADDіkG7}o߲&H,%`ZrʞmWڮnVו@wi_h-0G5=ſ_׵*mUV>3^?b-K8 dG)ۄ"M}qjex W  k\mQJH.Vv,a"(%HkUPx$SJsPu!d MF4خ,t?GG29nAxRΊErC4d +2v8VJ}3:֑hXB R2^JJT,QnoX8mHhbgD\B`T1gUxm ǯU8cDܐ+^{Aم)I9E)QND|OJV:ZD`JU!͈ <?<)I+{ݾoOePMɯrє{O}T4U`&X #.&݋dsmZuM6t /846;:6K(` B'\qyQGmzӶokvh_[墔ݗ@O}ۯ!&W6[ͩIż5up;6R!W#0fc_l5^g{VݻmMmjV0#W~t6'J*:`#Çv(qNs#0fuira8G%6`%wo9_ m 0; xק띅z}4n'\ˠD&Äy/&yθ ݿ :dF`36W~6PDi-b@\6ù u0eBVkqe{|.4˄{)L)'J""ؾ}^W3^9x²lfLz3>oj5.+QPh$Z*6f刧mAH3 0ccGFCOSMƮ]/^Ϝp8 T R>/im8CwˉDQ{Wq)L`JS"0 D`0%)L`JS"0 D`0%)L`JS"0 D` ZJZYEk=Pm MDٮ6U t8::۵ن)IAi2lC`0%)L`JS"0Ou z "` X,a0K% ` X,a0K% ` X,aVsa=IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_3.0.png000066400000000000000000000566561410275732300236010ustar00rootroot00000000000000PNG  IHDR T=zTXtRaw profile type exifxڭY E / \'xTDVgMvUu2BJ#(ÿZȧepӟw/mjmip_1G_D{;p?/{~^7)>Ky5ňV&"'j_W_K>8+! _m}U6ߏ wM,;F\A Vv_kwT"Zߌ#: '!Oa|k{ 7Ĝ+$!Hs^i"GȒk٤ rbX.9J/kIϼo;T%}LO/Re\/$7}qᏟUAP0768| 15ŭi_J{BbRXSTS4K86\r IU6s`MKO[QroMX(ЬEU]G͵TZ&7,[1jfͺ[ijZoKxڭ ܙ2,Sg6s,U[vĮv})N9zN?g/^ݼy7Zz&R}ActD/f &%] \bKEb E I`r[KC.\ }P[71>6q[g_doKG5zky$g]W5\nnt@h>&]kHndKr>/-([{<}Ց _ ӷi)W~m]WSzs>:ljG^4'Vg1S ׉vK<AgYfz{:fab/^4Qऴkz.ou[twogژe1!{Oq$Ze̶D:?S:e>)0CnׁX A=йIg+$L)(ym=Qy`:veóz,ie&iZJksΈ;36h W!sSɎ {!F(:zC WMmp59qu0k/Q= c*c ^HG VۃyK2w':u?Ilv`r>uw# {r^xcyO: <:Nb #r=kn*X˓8;#sM1fb-u,m[;{Q0bYqvj6+G"&h/'CJN EP9if1G]l0: tG1=ywݟ#LYs'tAG.q.9Q#' . x8s.+8:kߓ0\VNk),b "Ȩ*,iH1U#jP!9~?[8pI b#@hh5lض['@:Z$bG@6pq=r|%Cr-7偁[o[@ze{oִr|6iTXtXML:com.adobe.xmp O:CgAMA abKGDC pHYsE1tIMEv:N IDATxw]Wy']k]r{clZ<$0 O&e2HKw$1En*dݢmqel@%Y垫ydiw߳]?){,lVj#݅PhCpV 5c p@V# 's  pjKV  'C ZT/N`gh),`nW/vIzL4hŁ[k8&?\ڌeM24M0i /er4g sV<8LJ,/Rh-3 ֬=o7 zQ V7Gk2U4:̴D)IJ-Ӿu_PLh,#Q4XP*Gњp+ 0^ !3lte/rg*~{%,1ҐX|+*iײuE( 0xiƟI Vu7_0m'- /}?Ql'-T*U]uf&I/w ءf~i͑y$V֚Ĭq 00~߆Q7C}oʅ3LYm̾<^6b{lDKo5L6D[x_*C~eFPV /Y^0~}4 A_yU(`68W`%Ѭ* f$/@*v7VsVЬZmd-u+%J{T\W%@`8oКtX *Q7{LS[ZF$ V[.Њ 2_LFbXgԚxO3խ`"MDĤ5M^Vz1ҘDI͖ Qllej T;uR*0aDHbYCcRLc 36.i@+IHW&cd1̔];"f SD*Z0kAD5+f^,kb{n6:jn3a$B3Q Th(!P_gƮIg@JZ13i8RYvf^Iתd:XP U(ry:5 Uhܨܔ{:&v]ioG-G &}}Wjrm+ծ .?{o7b*ЂaAHd1շwS*h,O Cr|vu{>7\=3?etԅ$fVB1`QKgAa:WEibd;W馐0@b`Ub/:]jdz#'? + mD)iN/ 4ƌ 04Z DHg:;> Ɠ*̬B hԬđN]mv4XOZTP@`X1aȲroKc0KĬB&N=6_ٿ0wfƧe#F(L̗ˣ*‚"j<ӿStƲ5 }L=qgXBim(p2o2w;Qx-Cpvqu(~kB4v&/'OX.ڵv+j,] 21jmBQu@8C3j +ytM5Ĭް5ah,hn *pX}_FX&1p~\3luNvugmWc E}.JlBdf^Tn1nAciM*ґR~ч4@`Xai5n{Q䴮ra)>{jG݌eEDdZA2dvRgI+;7ˠuH#L>8`coMBHlu9ZL0uI31etfi(Nal:)}Ы{}A 06TXޢ':-"° I^ _P&ìؤGÀfq2Ե`Z, O& MDa s!~ѥ"4/||i~L=Bk=n`b> ]뙯<|m,qg̮H@?x~xy7&"R1ZB1J;{_?5O4}/͸B+ C;Bh!5/8ϼ7oٕ̘}tu?RmŅ`<4%ϟR@՛pgV6Tfꅞ 3-ah:gՕ~[ӈ+0IXn_QdV?n;kH$M^,AjR?i |cBJ.MǜSaX?+'Tl_kDJ3kM]:B$E;ffvLN}fE?Tb^ǁHVLA 3M'#;pj.^=u>挐/_$4ƓDJD;5☯Bn|xw|tVRk^^|Z]Ŀ!G;L`a"dm갔]rkJǶTФY00M]u$Ԛ_8p!|iH$:uTi ;''GٰmH4̾DE#+/^C5߇c, +5t{g|eSs3iMaqL3Lh3-%y{[qSvMaiGkp)Kۑj0ӶjX*dN nx{fеRByRJ״Xs\}ۖg,kx"KFca:f<1XgǦ ehuRN)ggۺz'25Rjd%ܷu^ Nf`Ųf" 7z,wF('t.*L0T:hr*sx0.tg;ݦĵ\LzSM8+ܞG~yywgJϦ:z v;Lv[Gic,u-ͥTdwp%l#"u经HS[`ECl߰GJEbdc&&јۑʔ6w-lLg;{M'UWa$W{L݇t.mRX$&}O6K6 3Kƺ6x\?{Y*[_g:*If"i) iOmKݦ;<)4,m380u}< NnI﫿q}nM״(_^g 0v;, &FzXja#|aA\L[tG|ߏZ J$r}"A0iAD_ݠNs8ӦT eq_-'~ώR?|ԫ躲¬OF[XLe=[#++#1F}iAcn}U:kn3 0:z_Z4148g˭4~|_q xOGoafjJ)9S`X*b~0U\3h Rk}7~)ShhMA8+wUL'{ GWGqj{{{odg4F]/]ΰ49}}_f,V$RŞx7L+HH%1WD55f~~уo}mlWی9V툟% ⾡+e jfZxG$#$x_F`k`Uvf؟_6K4#vۮ-l"Y&>)Cӈ7I.6l{歝 ; CMwi:w Rǧ#KSo=P';e1~-]~w1GAwpyw2Ҥ$j3J4B!8pK|Y*0>nfњ1'&~p$$0J|3鼹_Zܑj78N\u+5g NE,!6%28-㝿rsYc|4A}d6p7\TEjwZSV zG 0|[02֓itn5^<>0kX)Yh?qs8lc T/ɞAp,-.-y5'^9fĒ6 ɕ"nf O~+f`Eۼv[HH*$U.CS1y6Ƶ]z9g~{,$%mvT-Ӧ6n$Q[$itf=/B&ǿG`m"<66m:J%ö5.JCL# vݲ쨼Ɏ zTV_Xk/mODb;&kM4s611H3h#  c(u]/_I ܲ} /J+A`gXq{aџ" Znv~Ocl6*  n_Oz!Ve i30 0Z9vW$$w߿RTNZЫ;3%ը6 0IhhM750MSpƗjTiR+R,XpO5}8 0J>x, Z0ԅE`%N"E{צn1mLLԲZދ{I|nM1bQIf&-4SW S7gx ;=Dt]yO ML^4^X:ZWS*~$2t!V_5}[y$A[<jQO̍yW}} U MRfS~PhŰ@D$ Ҷ2 0fwӓ߯ާ>֤f8QjVt:4=@o%wZN +|rw~ԁGLUPMX-#k2]acIJ*ZOrJJ4>aڒ(Ĺ1JMk]p^Tΰ~꺶d |l2/mpñцraϼQ=h5am7lte=6S=᳴3aXZ+>gB@ Z܌ZZ棞CO.*}hK:e+3jES:WFVmkz/7ʛH9<˅!>|t_w $Qժu&wYMk=1y_20ǾzH(-䱦hMĒtoB"!&zГ?o}f`Uέ N=x$9'X/展Nf^oCN]/܍  Oݏˡor/}p`V4ެFZ%M ATu<} >ID<3;R33eTV ܒ]>L6 M?=d~ '&/Ͽi#n{~oa`5p/ hg^ IDATolITFbu`58_m}4m4-Jlt(<~Q$ 0B~zA:gk['/~uIX~zEO֗GbpND3#B0?_@ ?U=kLdMq;SZkM( |8~~? UƦw|R%&#d6q?iG|$$ ia0 {j2$y)ٷ!>mt[sH6ٮI+C/'fsX Lˋ NSZ8kZF3 p^HvopKԥx9]{_'xlőq@`h˛"vV7&4, "jMhvl_퓋S_!gX7> Ҏo1#")_NM-N_[:¸sE3tIH?{?00eaR֤ Ғ}~i4+i" zۚfSNn9lșHn'>d&Ġif](j8L^RY\酮]Hm9F۴CD  f)C.6ϊD[_:%ϛ6aDu ~>g^W%X)lqIzM/(EԬSC)"YQE&2 so +EZS42)5OPqf^5#NRбj)lDVެBjE5 ^d!eܦy%[zeOzZ#21pn^whvf5F:hGҫ/ Aۆ  V[3ΎT {MGFNHks{$ۆm(jg}r5do_gImHMy$0$$ZV , p{d#r^ s~pO fjSXjV}e[QEL:x?=_?QΑP@`X ~oFN8rZiE8>=;/-8_alXֲ8M ;'?'،&b!5߅$fc_o^=F #%^@l$eFD# ~Bxsc #gǨtcߺ ҷt  _*4Kh,8XV΍ä8yD{ n(@b|㽗w캥~-A>Mqεc/|WfL;*7<2aRԊvwSۺ69=N=QTVhn_Og&Y)&>3a4uι]#bbah;= Zz`Uyׯڗ̚;vdd&aA* JaixHh""! V6)U|fsls) b"l/3HVXJi:]Ufbb&bَW2C#%T Α/>ph%B9WUdjuF|k$3Xv5NqJ9t#u"bc4)1 q;Ӿ8TJuDf-D/M>=r2V/9'9[̔HkƯ0锔U+KLZkTVɯ}Ω™c8FB˶Α5಍j@+²i૑\k/g=YHf'v+#ۙ]]hEaUsעG,2HC[= bq˩y6@`xsF;j}\(ElaO:teܺRJJax_qnjH,F3ř$HLf缉A5`a}Si*bw$Y脖xRf5[\! &( >1p~]7""!c7 ;ґ_; 5K.ZYf=F`r pdcMǁvd!DӲ09C;N%)ILv~UsX eW!$bAHSw2a$8P\-<.N=ՒpX:0;Lf>wAQ#QXJi[ ""BRjXa;⥅,QKb_D`%B>W_^9zf6o[0uL~0ЩR^X)]WP!@`8.g0}9ʚ ӓ`W>יilc>5r3q!M{ak_De/g0s7=|'͈c|B\\-t'CvD%Nw[VWGEV~b?% 90ѯjz);ښ̚`Lv!9]B/՘ɶ"F:=VCU`oâwǒeD̔^f6 !x^sr!="DK}B bfNKp硇QhXVV0떯_udLgvh%w/Ysj޻j)6ݤ(5 o{z* +qg-mtw*%'`] {^=r>֤ fճNo,* qg TE%24Q, ҤuZz5WpL4rZp]>5/L}ȃAYU`VF5fgwU<9IkMa>fMDf(VӽF6XkbvZ f`UܨM0%3ttTNl{^0+/H^4@0Q4z%P*t̔ K_ϕM.FU`5/Ѕ hL[yK[//eX:ߨ=7|U5RZM?23r: fSP,E }kب 0Ѥao(&;]]H|Pɷ.wδW7Z2HO>Pj"5kَg g}/dV, Dʌ Fc?cQ GϡZpz"~Q&d[gumilJ1SrDRDZqB羦-;DmԺ*I -&!J+ƱuqD*KK\ HF$}qK,~L"6lсG CWxYmTKc۞+6ke*H&&H}OLZf~L2x>bxj蕽 ΂[ջ>t; )'R^Ok=}?K=EK;a ^^ xXPphCÙ.vSoDTHn6B(!>Ϋib&^!d"vd)1=05s\qWaHjfj_y4)gyΖ~s],oBk]ns(DU#"2̦a5k)w--ۍS>Ҭfa1iI5˾gDR8Q""bfQRn-jp!ß&, mJ3Ȯp&#ӛ)ݚDn[2c bcif?5Ԋ֊CV[#/ g~=m=lo?-/LKdžo#˷ -g:vRW'ǚNGY3iR^D^gcIӅ ;'<_*OHߘѯ-E``՜ ,Wgъj):1?}!"- 3 ~궣揩P"s:gN屃[WJ߳ +%w8$#:}?OwrK ,@!VOԋWfqR}ӡƹКT;zOkm 0_{?\?S+s0 qz 0 O}ޟdКR_qk5|W)Ӛ 0qD RM_:鹲:vp󷊹3ZVO{ߙ?B^<aѾG&ƮګP@`XArIO"kK9~X"+ְ& K;yG ps][ߋ&8Ԕ"V$#b! #DDRgwhw]CusnOS|ĎpRk"f"!M#0>K+Sq B 0sJ[qyeTw;Lױr7;9z^O I Ovn\HwWQWSsO޻sSa$z4^Yxr?ZA%U`Zƅ8_y[4+Ks=OY"S1+ +Ż͗}&Rr9cΧ&]ZsSc<B1 0(X^+Ra fS5+L}V$H A6'՚tyf'/ `%fZy⠰849樂ΑO;;ɰTK) KɃ/Ź̂5 0TܠIZ8 D葍N]"iJ 4˾g-< s ť ,  0p74uH{nA4a֭C;{k[LKGOMXS8),n2y@`h3GG,Mvdժ][u#7ʄS)ƏN@)?$BX@`V?Q"d&IS*=ћDnSsrhp@`spo`E(y:^/ (/훙zTDؔ xm R$㵘5իރGZUyZV9>OSPJrzqn݄eJ6g@`5RQx:^+ 9\f9fATahaeX\ >:T|% me:;{iyh@`V߸V?_X=Zӛ`fJjO>Hb-?س}wvW&GkB߳8ڂfTprZ,{uJK3;M&:~e! '8^~ap;';YI;%Tΐ/|Ϳub$"d1 'ۆDINdƀٝ|ˣZy(7$ZG矺ȷ׾e~jO'"*$54 1!H۴gš T%7V. +=_9tg#u[5Wqh`F=&Te=m:ƞڋsO;߳. qk,A D4V4;UQVGN+y= 4jqywQBrֵJA=>|@FbU2hˍf$Wlb`"9Α{>Ws޿}r_䋑,ς#D4JӨM&`aH>Ħ-A.u46&P RZ^ZDۻ߸;;3G;vHH󠡔HTOU]7]OaQv]! (* 8$~{<{O&(*u%s=Ywc{ե3/-M o-/lw)?خ=v٫ e3E !B[!}R-o~4rh|;f*ѡ:u—AyFCEo{{֏W*?a)B,+}%`3x6{6 C*j:|GX9Uy%Fּxan4]@0&~cj,/#}bfCFo&U*_bǸchjʀ`fs&kvdCjJG>rɩ/Pv;յTV1/5f NVG&Z=TndTtn[,l?/]nkvcs' 5RW˔R sFF7veYkf v7b cU 1 yuV1)iۻnXݪ7˔ǔE7.g@0NB  C,g]z1fg@0.,MN];Vw|oO.}uL 0(Ѱջt;q)ۑ 26-6W"m)CIDAT:Cp ``e8A[C,μWV%CAm\[?S ׮9٪-t^BJ!,2qz2#vŐk\|㓭Cy%U{q9tSz#= ,/sOn.8=wh9й:vk3: 0R*V\oky/!l݂c) !CSQ @0 ` @0 ` @0 ` @0 `C!T^'/T-BJ9PY˥s\)]! )vk. `@W_x(= t^![ bG|/>x2, ݹ% 0s^dXclY֯Y+~V2mAbMe4Q{sz}vbos.;BJp3Y^X؊0!.yq}2oY/D!{%s~ W8'jo>am+^ܗD߿jSpneao'j dy˛{9~ZCͨ,n.[Ѵ|GSOw`0݆]5EZ{@xcǾg[+^9-/E[ U^WSt267Shm-F-*mi/@Tae{Eߘt2Ĵ5a}9#vlٗ|p(YC M^16\{Nyii;z >dnCu{-E3[/c%WoSٳN@fUF,Yb }?mM&X] VVxt͖+{konSCZ+/*kd{S!3|]\uׅ'U.wҗ|vk/2ʳ ]8a|Y[Fn=?L/'=g@U[Kwt(0D>O?zl#u”{n-޺/xKW}jʬ!8ҤGʍ[yhHtw(p&&{ͅ˾ݴ'rv{FT*?gH< [UzӲg_ezҗ[iؗL-k:(0 4p?$\{k+.Yx ];Vw̽~{,QhiMlhx% >5smQ`g8,83T>Z~9`#㏯;)m,v٭C$‚ͅcw?^u_(\`tM{(0 rKޛڋB}gi( 5^x137%~/Ŗߢ?}zɮUo):;ƽetD)G]*Թ򿰠0n[(`\UZdgYcCw-O!Wy?>As tz:;D T(0ؑgmYTSHjaبaUGV5O%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_4.0.png000066400000000000000000000116211410275732300235610ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1aIDATxitpi]("B$@HH\&-M M@n VEZiqp}33s:Ι9giϴcmkLV#|{ܛyR\욁쉦VחV'Tq$aԢQ3jZ9 A0٫G֒8C0, `>s0,:pc`n J`8_O(*j=ۀ/U*~3G. tI.n3guf};] 5~Q?+64C]#VK:&~E/mts0hZ 3 0vɮNF4-   NA06%Avlx٩ep wh; ZգG ؓノ) T;ꆄz_0ՕOnP7&cDyS7*~ܲѽ VY`YH,~`>{?kx<>;-Vj'j†e+^.u'ÿ{-ܰpW=~77Nm7q׬r[~Ŧo/_~QS<z [ob#;M=7?VׇXz#wW gc,>dNoJ`Ȓ`ٓb?G>l#s|oт_eD3sGFnjE5wV<򲒇rU- ?2n7]vc6/Go@xg$iВ]|^ʼv̿Gư>RԦ.\ާ##Bk'aВdVfbA``ļ A.Ќ6wvo ҃=Z:ußxu+dn\7]E_/KƗ۴;]AW!tK%IU{u [+|]Ԯt{C~ѵWnnw]wOUNG.IwUĎD#K379r >/ƞ9KkBsolhz]\wӊۈʠӠ)M+\ұ_p>/<˻_+hw]FpUbA%yV!(:튤VחVpSbGsV\Yl {s2v.{Y5m qY#.7ۜw;3 b?nnE\K:u65~i J _W; X8)pgx呢wgXȐț#*?Q4m笤MO`Q[5#N~ʤ9zΫK읿ܵC7}d5-Ef>6[w 9I= Ȩ },Py$2;6/?g^PZOF_L폦V/kzߩ|4#PxPWq'}bgCRJ49P8?l|jȀKU;^٭hN0g`Q)㲪 Bkj[a˦qk4s{7 6nh|Ȥ_oI>/O)L>TL/kUO<*L5>^jjh.Frgeɢ߮;97kOͺFXpۍY-0gWމwoܒSD>uBGO6"&Ȭl5ySN=yV z_ 7lxcpz8|XZg] C% Q#9!'˼jy_e/n[⸽K_}7Pz5}moQRoXQ U' lӹפA š?퉾0v_MJx`\)g^X7g  _Δ{6x7$@Ɇ`b]ހO$6xe;_c*SbeZACAcyV~dzh//ٓVtBZ%I0@6hҀh`[}Ujg{ӑ+Xrdܺ̾i{YU[+}Ս|{1' -y! ~xwxfX%o[/r 5QT7܇ /_xpтǃwM"}֟޲1ۇ/"bA0@3V|^G7qS†'s˶g/|鈅/VľX ЌqQΜړ _ulүn}yJߗ^/4$_C n7OҸTQ8wݷlgƒ'_yWC 52'%;s'.Ų7%G+Fzh ;QyWB 5ƙP?fukwL}zW sݐM0Y !kQěweeM)4B};4s=vI+Z`a0U/?ŸF0@YsuņZ\<{ݻ\=!۵ãIV}<"{!hش~T۾EŃB0*m @0gpY\y$Sqpa{^2שكmEs)KB"&9$}̲҃ԍ*8S0D @0 ` @0  ` A0` @0R!V_;QZU_&@0|%>% YmM} A0`O}y(z82sL~{CKw)?Q"@04Mrλ,Ļoߜ=Y*@0|4iՇ#6>U-Fw44ggsw|ǃa`G_eȌ˯N.ng Y `Qذif*~$i޹nyr *}7[8XUĂ`Kӓ#Vݿ>gۆ+ .^%^Ӫ}od,yf`>aDͳ=2KvXR`W99P労R+_*Il<}`QԒ}%NV8i[A| (Ze$89\;hwz ق `  @0 ` @0@0҂!%V_8\i|.@0| 'JsVZQxssw-z"sĎ h0|ʑ-h| E_-ͫns1yDzn}liJ` C#ʦE/LY;ydC%{k3?UV}8$h\qlҖM[~u}kZqXéDBG$`* @0 ` @0  ` A0` A0 ` A0` @0 `` @0 ` ݂B00sĎtNYo$9CRQ3gUIV  <揂!M0c҄s"eaNsMhNy-{!Z%m` A0` A0 `  @0 ` @0 ` _ _@82%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_4.5.png000066400000000000000000000052021410275732300235640ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1 RIDATx}lUgmJ1Ôic [Se|h(-e99n P0)YSbdXL8] ϓ97&_9]×=8L~0Y׍̺O .w%!:;M=|a+/YK=tqS8y0|gÒa0wknPnT(ۖ2Wi+^w(|C=bilٟ ҡ@"Tô# ]Ya7^3sދvOjƐXonJ6 >k㘛l7p N=t8pd>3w nFK֎NE}*vc瓀n~?)*[V^oKhWˏND6-SX@;-Q, oJ àխ[* Gc7~0jKoO˶憖Lis}ā%=ʎ_;VZ8paSlXTF Qa}zYK_3~9ܷ s;+k17E}֬lO~^#*g'_eܠ8{TB;D C`{^(X-|4榊U4qCqwJxʎ۲p~hKb flu]̬ CUk"*?_v0yf≺(_QߖuTB2tQ3֏#ݝ߂o^aǤ ]Sr1Jg;_?]Oʶ原iZv xE) řGS/ݖ\=ok% ]XFk7.Ja8~pyX v /BY[ɏ/WVeU$Mlh/- ^+l~h&j)\63P9> QUgkG]_?LTl}[?|G^n͔ L[3Rp90o.UeG=R+baφ$\(wuukPuE[ѫәtXљx6:S^=\;ZT\ޖUfu;c}[Cċj%{ U5?_e'*oj[- WٱaqsAI!YfsKo3uaթ{:wKyaO4m(j H0; ~K-Hz%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_5.0.png000066400000000000000000000370561410275732300235740ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1{sXWK;E=om)>c\8# a{ ً w!3```6` `]!ռ` ;  N&p0-lS& U0` `@0 <nί{߱Oq+a  @0 &ώs_Х C0mz5# /Gx.t3N2+8b7#_]<uڳi3io ;m]ڬ XeNOk{23ɱ.s=gE/%d2wYmhv&oɺ ]2;285ӛ5s#E'O1Bua]jVU&l χ!egBW2ԫfgv>U3)1)dk\n^`V FhcmfLq9Ÿi/kv7%l^5|բM ;}Kj]5C/Qh{E^kobY1t|K C&g8u3wv:}MMUJ7jƚ+Xa7{']e9p^ܯޕrηxG9ͥQ+7W-6/s&&z nY= G[b!ټ`Nث^^'|*V[Ŗ&&-X`̵y˖=o](E?WkU;Iڣ#l6B~G:fb!_kohЈk߹[,GUFƑfN: ˖fj8_\Y*-nZ?~+eX\epyڙ' xb~ڬIv&]jڷdgA=j7 EV^tSiCy; υUAYc;wl(>+A_Sј\ {UX*Z(]C+rb3K:ta~蝉^{毮]y4Mju19Ս)eKφUnS7dV|qL֠_ߎߠXe7˓ ړ~},G8i&ψ+.<jyc_ y%!H•%+x(0LX"[*]zWᄭt4S'47{bҼj^i=I1zSTyIڼo\n|S0:-I2f{%Bߒ敄NaZܶQZ2=G4Ty9d]𳂺\oOw*o?ĭW bFva{̈ږlo:7h=fZ[*}r/`1?wڗmz9%d╅uԤ(]}E7?ܓoČ-"&W̗DuL Y^CUKڽlu4Y2w|9kw*WUxύ 3`hиV\rG]iGg'8m %!_|OߛuLlsӓSFm;u۩mxz 5ö[pIS8Ȃ_s |ӛ~QSkf&\I\dsyS%ʺWϓ%/Uʼ -ÄsYv.yEc9CZ1N;WYBz}_"_џjB 7g栏̧_?l,:'o~iq))0:+0;HQCUm,6y`1vB\ ]Q#PSƅT[]KoɶQ2EjH Ɗe^I-Q1wfLNkׇ*_Hڡk%?hUި]ysSX>~&xOfOJ8,l߫j .Mԓ~e;  u^N^JuZWwѾ\AK.M9}2%BQnc~+'^n LM`twc$I yնE/szE$Lc_!֮\{:7>QNtugj7lxCŰ/ WPOKf x@'BjR+Loҿ|пMګoé{ȷk#וm*$5S'nK=^_ 9!,t{(|,rq>q7WJ"L;`KӷTl9/~dLj摈+/՘<_ _X]$°#&:17]ˣy޻ڽ~; i*[?}{:)P$+b+óW=߬j ^0킳?FޙgMjbY% _~T>P()fm@O{wW5`nѩO!tx{A+:/CՁK:)zR; nZ~;uCp׺F|cEͧX w;ihG픤ګ'Ug < NSŲwG!V(Nc€iÄ߶8&8PoL;\w:pYiT*yIkm7n0cx9tv?]& ϶(dܩ%XOKUJ*`0e40xz]'wZf99%1'ܢW`8[1Q $aQ$ -c!c»5s`ޫ(F8 :/ _ᶂ\+$hzSkV)OXj矑Ro n] w5|k,TȟfWmYh;67 |`k]\*=MsB|%zu eL*=vwtv7.I,h9q>bc@UAx ~u˝+F ,['NY9E_-8:[pFy:jipL_"bI~(byx> e_zyI偳#WHqeo}۰9NCϱj &MᷴjPZ/,P+ F1k%!EY] fz z71~ sk5H1\>)(m阢dž g\nőrһUǢVJ<=z0+~@K+b.Ƃ:e(1QL Dٛ\~Pu|].\>4W5;0K  Os>Ǥ_?$Ol/kQsU^Z/9tIN: tl8t]uL\sE#ޘX*ߨj?*kޮRuj:)~VØ)p UxD^o}\ݙ́pM6V4֋,I9ՉG6lBj|l"g2,VaVkXfwuO[P n^$  H?x9tfNeE2^ѹUbaHap&h&y*nwniq)[t:RqůlI?ְE!Er;tfº Xt1lsBǧYH,_!jjax9H2jwzgl 7X\ܴ1h1DZL^=@af2%qvI]͗b-8+>EVESK8C"cd~+Z` K }}<2<0aלѫ|ԕOˣ9)> =L603\ s0<J{R|{k1Wɛ*AOz2zuD_+A]̘i,7뚫ӽLP(+x2~c`X11ѾkYBǾ=lG>}%du'.kR{ksM] ɯo/qli^?9p8 sB ҟMpFص]KL x]ėYU8V( }fUxDc#~sO03@u`i`Je vѓg,5\q67ݨ"}}\|Ͱ/pAPpWr<`1[AEfigů`~;_I8/QS8= xP`8aK2^O䝒^WLqA1鬣bSU 'Ux:LbO'!dlW*n ʗ`)$>6C7WW^Oۯ:(pVrNVO|)N,~&ʞARy bo!z(1l?^o?-ñW5{4gFQRsl U40'9'ū=lg-7D^as`\*H^u ?ϵTqHq9p说.qOsʨy+ٝ[7O7byc{lkulL{^ ?_W w{څ. R?ge?iu6:CZ!Qs{Mo]h\tw/E.%Wxr[amcf8/ Y8'!MB!5ijI7ȟ~m,I8urs׵{Aߨr\goh fkֱ[%5jN'miM9GV*՗M9'#~e8z>e_E U/䜜 j}Zs%zI}GB;A} 5јS{J @UEYY +mEO{=ng9>vf;ChxɌ߬;j8J\n])k~.𢡄u<2Jl*xp01{eW[{&Lӄg'<# 9PPy q6m_<ѥG̈ܬ7\B48_l)Vҟ0]i޻'!毗]U)*=Gjlo]LBIcܧvq`5;;}Ff=H2k0ܫCG[<=jfIbiI_\i74˷県zót'}wZWw;5yYCȊODVQՠOxӜ$]{0\"_7EAe, 7˯r(̫ p)Z?~c۴6Dԉ89 'loA@uԊZ*Oa\li;zS#mEkTUN9։;>q.3onʵ Efѝ?n?^,^->,AQ*oU>V{TK~t,nCʅGͷCqUikMCUzUzIkqE7vjIQ-cӃVNc*Rժ'#~]x>"ߨ Wb\/;rP$afuϘui65Ha7̧JWs4(+VeҪezTpFzRdg%1`.`ėSiSݲl*zRsWk+ݖbNS'94_ a4o٪%ECf~CnLlP*_jޫ,]}EQ6T眔RxN;Eq%˿ZxT<*@xj ܯ9]'KtMZӸk0ZRV=!=S((<+TG^X7?YWZEf㚫oV M^$}\<7wdVK_xgͲ1먲@:ܯOvϜ93jǼq#mԧ M;}kxUMfU ]I ]pIq'Lr{ Q1/(hw䜐T6K2)k;j._-:/FC ֪Z%w e,ľl7$mfe'm?ӒzETWΉ~k5gMch~=ҦP&OZqHkjϦΎ;Yf?//sWēIG~ ]0nj۔)2߉j%;$|joU=UC nYYGKU-wcU>q2SK˔B:Q/i= ]Fv=!Mm?SNp\5"fڌU=e)/(,[Exh,WEo})|7lAl=¢ ј"!e/vKk靇 J@W&0;a~sB6IM*T6;%_M|IQwwT+}8{sBg;~g`7yvUh,kTko&n ]SݿCP[f1wo>I;]treeJAVNZa}w`ٱ˷y3ق}B*8j.o^yYwAዝsuxwQ|#\f[mP圐uMXޤ4V_Xɨnnԫ/. ]lNkuUߋݮk1!$;|k1GWzgE[ۋOw:$t[}ti:(KsuPt>f*/TW4FuI5y7x7_+Ø$aoXe"+?6}>gS4|T"~xjɦ`o|ao).;w4pzZ?<ڗO+ UƂJ.)߻Z˒k.)wBWĿW>[x>uIaaTFF#eYFp} ()oTWzIJ1YZl9rS#^6 DhVRި]on}-8C♱`z,ĮJ wHxYKN Ag+ _tҏx Fc_4aӾi< @;7q\5E;uڽi@*ev\E ӕ T?y!0Z*vwqv D+ _ [)]ࢶ%n,erKYϪk_׍Sv.–p\cBgnob=ef975W\?@s]mӛ3KbkZ!ykX- yNxrpaTaЌ47A,/SmT_sUۄy3tE_ұ^z4g&}rr H/ymä>]u,[S3NʂysYWNUMȢQc=gqnO( ZJ.?/:SR+W6>>[rQzWkBMZOsNvF9 gp0m0׺nX^ ʭSnBtFwޕ~)4Wf^;w_6qœ#WK?(n6ap;2ZO[囵WecYaUl{1K. )>/"lI`8": A6/4_5jeQ>/o?,%]PX?f;+ #!z>&^(8hQI; xYPlJ_X=# &~}~ͣO2 mѠ`WAÿk-ا^z+ h1`J#ld6<nc?}T謹pH,;tgTsL2ngd6<&My~_X#S&t̉;hKBHTxiIY vřwz'N'VW3g5hmHj G$43*,x~^oWTҭG7  S5 /&V9XX>ĽF}2``0 {Tӛy 2;|q  M桽s8f\Ό7-cB.z}ƻw z(]yuˉkq1'`TuR^Cu9J8C9enQVG"қ(bp1=w(1&vUJNw.}Fq ^1`B 2FsJ F/nNS.+&M Z!u5p4zN19``67fB!ӄj&]LjtGNTv& , &M0=/?#  /G:t;Ɠťn`h֨3_1iuԠY cΰUNW(:?FՑN QJ(L$fY'י.!+ #]Co4N3uZغdVG ].ÌiS?3zύN ]N0s0Xe8vSgU:qk8.=񜃳-§-KF0q0O5ٔ=lc7e5U{q3c'O }S;+ MjݚYhmjklN<2}9{m͗lհx<\e%l j9I3ihzT|$}hxڷdWfLɈ_i$_Yl]* 8*xUcz``H3nJrO9-t]0 m^_N<=yf􎔹I4 \% `@0 @0 @0 @0  @0 @0 @0  @0 @0 @0`@0   ` ` `@0 ` ` `@0 ` ` `  @0 p/ZG lb٦s15M;ޝ`7f[ e}R׻mbځ`3#՝Fk>9gfg?Al57\~d@0}CNP5L^d8aQ֫Sf禭\ZILZuct:VҺͯU|NssgMK336N}?3isFы. Vf_AGGG1),ՔuٽwmVtZ;Z>E3 [Я[GNJe?Ztƹc -RochچnՐW]ZCük ~>cS Of89wImk]aX}Z:e` -^򩲆={ߺ̛nߐ9-l[/T/vܕ~Guњ tow.Q%wc ^l,E׿ؕ—ᡦ9~A%FY}irՊI匿Ե9wm)rPmׯmKQ/qDG$ǙrLX~aʍ\]ΫGP-2|G^wN~>ޙ1ieTvi~&0(k -yv+0$zOxmcAf$.N9m̒~3# k1Ե'.,kO^ V *93h=,J ,N n[2r4z0wo%["Uw>~ jC`”>^Xm^{w%bg|*ܢeq xЙλඬ!:%09{mȹtܲ` 8];@{ >.kzV6,ז{MzX[)/`J7- #.:Aޕh]{%,w;8;WM\>铿g8ϙopk{6\\3ym8,UsVf\} dcX5wp”.#L9|{]ɧmXxsMq uo. n>;>+fm+ wO޵*3:Ox"= Jwy-Ͽ%,$k)kN^uV{& w]pM_8c<=y}zۗ Q2Ҳm5յ'^ sV5~-vzߵ]: F>u&oly;%=9-|ܴDGdzc_VඥE_|c}dgޯ~"AGi2|rֶhQMK_ 5"^j,X+$5Y_ؑ?; w7',u%j5yuUC>#uҥןQ| Bô 9 ҭ_9wTًc~yw2|{^]ID5궤+ .^vý}AStp;W NnO&+#|żu[~cC00d=QUUݾE֒AlCMYu_Kٶh~~\qo?/ C=q a1em֠%^ O'[X8Z[yOX5RRI)..=9N\޻dKd͑˷mV!\/ო<@Xp{vy 7}ٷ]sE]-x-9sy?w7n~0,$vR-fzx0%ҭN]sإΚ)wl 6sKHY*Ám/߽~?1hԸYvΔY(^dȐ'|Bx[#Nz:Qv_nt}>;#*K2Ҡٯ^ܵxM%["Aq^T2#3Dzx*ҋ6fWL\189"P-puகɅۂ087?!iDMnm-Cr57?)='-pw؜;"+>vˢT'+_^#oq n5OZyUrƂ`C׊p2+ZyWðk^o<'8ϙNv :rwcU>_#詌 oF߮w< _pF#]*v䍪[1ЖxeΞX}ɖȍސ`4- s7*v/*ҎmKg]#5e]b\Uͳw?1iu7קI |}Ϩؙ__Zgnν̋o9E 4,tizkjU+ OYxUݒU5L\ !:D]nG*v}ksOrvN{E+]u# w/9yl_?*M]J6GÊt)2eMVOyp"4D i?āaW~cI}NX^sjVTl/}fؘՉ`꺜l[* eSf'(09=ƫ>- &Uc)/ӣp dVlɹtfXm8tҚsn^ >k/xo+wϯ[bSe_G)Y״[jcᶹ!2nԃ)A輿!:xm=zU3y#M߸c[j[ ^)ȗz2 y0j~45@3cյ'[`j,͹= p5Dj*xnߐܽ'>+:j[ zNߔ{' pMߔ=ǫ⏅*w<^Zz~cSXM%YvHGGǻ_WZ-m-|ЁzMKdXܳ{%:+V[ua?w:+{Ns wl8SAqnY֣>25Ús37GOwt`򏝐c$5A+2M^uU]2ǘi;ϙ|MYD* _~Z#O60<#09^3oƒ *wl6 -b/9eچ+ʷ ؑCŎؔv|=14xn `&]Oj\'h л&xهR5 NNDN%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_5.75.png000066400000000000000000000025531410275732300236620ustar00rootroot00000000000000PNG  IHDR TKgAMA asRGB cHRMz&u0`:pQ<PLTElCiAhAhA{KSd>%RpEkCqEpEYnDT6Q4_yJxJ]:b=_s(=  BG/&_zf 9?|_ϒK-Ymu j~Aaя͟AK^De7oVT!y@/x5%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_6.0.png000066400000000000000000000213311410275732300235620ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1!IDATxwPQ&U@: M }z? T,D;XPfM٘f7&s h(*2<2y>o| IָsJvJs$q{!/"+UHk5B0Suj ;l~փ!U0@Suj:& Ӄg1^ F0'5`  OCwULV}G4 \ٲOаpT`xQ0@UTuA-Iϝ`X"eaaW`h[˩aE yk4=PA0@;pյCF,`C*7~PYԻf@3-Ls,gR~h;e-۟HZԪ=}W8ZXq g4? 8:,c}?Qwڎ *{c!d>S}w| kJu _.9dyNJ+|q[*̴f=#suq3 }g% vkV>]2Sʁ:%_VNQ$ z0Ğc̝ +PN+ hӤ ,_.Z 0nZFM _0_s=3GjN;TsxIJv#V1꜋Z27aH-'ޖ=.*%aKS>|P 盼J }s3?oSG?:9nJ8ЦY֍2tȸCzNޖ9qѵGo>ûC+S2ԨY H9OZ}(MoFƩ16NߍODoG"~ #55KRԼJ49/u~`XJAP8 =:8y[N|ϼ.5jԻ,AҜc7efؗwd_<b#U<ol붾@UAc"҂#{&禕φwL, 7".Kte[T5C;?j\Z#uU 4oL3+4sD-qg[rےތlo{oI%muULZEUI&ݖ|ݜG"A]\TV>ސѤ`{e{9F">-iK^|*f]>:dw9DRZX^dܩd,ܕClN򫌅?]e\u0𪑉9FT"P?9xX<"~㫑-"^{4޺c'oZW .?\݊@2뾌 hocg>}JhUznYݬ-Ie A֗m ԨY=_ּ7дxlŸlLt*++؈oSn )?`g;3{6¿Zs87ل7OM{285ֿ݌so?z}VYami?u y7-ؕͥ侴b_7c68ۚ`~|-^vSmXi8] oK_8p_xӞ_B`xUZZ+k[l8] _*z(̊8;&G/oӤΨA$G e-ݳ3j}C?y kg^(y8kQwU`=i_[z5>|a۳gĂfe~oCGv.?k]CkumG@3YT>UT?)ӹA1kv)۲FߙwۭIoDp޼y S.n3$"]< I>l.K_ }c|!8`O|>f|3gCmz>ϰpwEeo&畽4)}ž?u$WЎG=϶ };~W<~衜Mo͒WUv>\a֩g0,yȣݘ.5npiVVet >mY;XwUՇ"lOXY1F{u_853׾ϒ 9( %# iߜ#?,| <}ԆoU wκ/\6zczaYAî_4zcF៟kۓbې?7ʷ[2K[^jtL3/Ug=Z~0w 'CݜUtU?=쬪~7`{ TګvƵ,6q[s1sM3hž!'zk}sjB4j~9Enx&"/,z!kmY.sޘiZX->o~cGܑ}[B5ߝ[shAKF8"z%`ϯzdmfyw=u¹ kD~3~ka^j5ɉwwg,|m]y> | C י~WC>7"+x轕){p ӜYt=ŅV-T}ԸZm75p &%+kNV:!Xol{[N~ތi{:7]>2/mސc7'[ F 2g"OnKz/wPx"=l7ek֧S.=nE*utd UUsjN%kF]זo tk6̸' 6ap0)ґuݕrܶnM+^+w_v:0I UR {ijPx~t |@ʁ bWE&8eD`# ]̄px`ƽC%M _H _ 83ϧ9z{.%L%_Jr+R;/x>gRѥ T qXtOu~D?=Pe{3o[,wW,IkD*?<ֿh4̊~hu>}.3gZ'_˾w_7Gǭ+g|fti(фӗ?cM)1;/ztx#/+zdDF9L+y飹>ߙtm, x`\PX(r{ MVȘll8y͡yg; 2r\`ޑ|eKv~孿) '" ^4' Le`]* OD#X7XQS2«S-t1h3m0`hmz3\pqwֽ;G>)m֧I EǤN m[;句;~/vaѿ(|`'7W~9[vzY\ݦ]&ݲ&h&qf,Hȿ,y9˒'~7ky=rn.um+^o7?yfsW4ִ{m阾$>yܸHҬ+oݰo2gN^ȲfŜWS2{p~A/m0-h쁥{J^.M(yt`فAG+J{463'q㶦-2s`VD8Լ^pYAAeeeЬW~%=\HqsG6+n)ɤyƕ-zk=|sqgK:gjm/k6ތÂzu^÷3 /]9pxp%{ˢ/,1 u0uL ) \x5L~`f y#% ޞeqߘҼ֫ߩ4pתo)kmиs%mw=Ķ}PH4-7.6Zl9AX$c 0>4c9)M?[4 g15_!eqP+?g(5aɋs׽[4Vl5AnY buJ=UTZ陈?Cqm0YS6~ym;$Mr,T%VG^/J{Ñ⁥{;-WY\uԹ:.qae==''/Jo+ /`([9-jҨnSP2hN`ny['Z s,{$~eK~֫#O^, \7gCTY >:(rCZu GJ}r]C[N-o;`ٟ֮Sےf=Y8!˻Gn4.vj&j7W;fnIk蔱*倩Z8oaW4nۍ85ύ9ݣ0ӂ!vu{m:.ge<ۆj;gCwj78R0 - i {O~d0 PgC%m p\ߐ` Al0D> mwO kdx}]+go%k8~ 'A+`<; S?!ky[.Ip6=92YO%5^3 ;cUx0$vx09ж/&fW]JWۂ2oYw,Kd.+ruNL0| 5fu;moI?٢Q'-tUbWu?_\s$wϦ7#_ȆA5Ɲ`]Z١4hwqwk=',4 6jl.P߉T9{. ;pޓ -e:WUsgаp gwpҩe܎_ٖG+9}'4Ӱ]PCPU?y[զ_JO^rF9O%o7j_?K#YQMcrqfoؓnA4FW]i/]7j[N>cĢ@7` םW翎/Ů47핕%g6N/Em9^ߨU4/cp™%#NqIWf@0JCB+÷?qSW{:`Й-E' `'vϿ-e߉ EO8;pkN i(z[k\մGnpIÇdOIЖփf6mO3  _( iE@0|d$2S~_ݥPW0` A0` `\j5uj4&pJ1A#;#s`;.-=iE$Ol8-E*Gɣł8 7(z cC\?e8sJ[94 )s IGv R+#f'~e` *'ÍÇ,-PzaߙڧW0`89+ oٶnxtƽ Q25+ײ" K(,zŵG;W9AK0`8\Pz;W5GpS`ے4hQG6oۜ[M,rqno1}E˛: s@0 ` @0 ` A0` ` @0 ` @0  `  @0 ` @0@0 ` A0`  @0 ` @0 ` @0 ` @0  ` A0` @0 `` @0 ` @0 ` @0 ĀDy2Dq%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_6.5.png000066400000000000000000000056161410275732300235770ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1 ^IDATxylօcl.8*)s乂IYO)Mc{ |gE|odR7\\[tʷ唗nDlsZqSX&?ߙt0wW;-]oeL_Ng^]_,TίZَZ8XEc/->?@칒Շ%Ʊ@W6kco5'4޿w\r$ߒx}V)3Y 7ccx{SY3dq}@P&;{SM~uJ=μ3CCR332?gpW>ܫbG4@/)|TÒ#c m?-Z 973Œ{y]qShHUKıS 'CE]򃁧8P\&eKv?F{:Rv]kŊ9U!w㼛 &?|nջr7׷%^1ꖼޜ[x5}jC@WsʑApVsFS5{VH_V+-~V.$tUAqs81\@4/xtc֕_AHpk8;(\:oނN~#*wF/}"#J5nrg-ŏ{RW+Y͙ ؑ޻p8jRrGt'}Vgo]|(G[U-y*笪oK)5&~?okvO]f4@1(7E; .n ;u(ۚ}"@f~d}u!W)q֦nE ^V0Pv%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_7.0.png000066400000000000000000000355431410275732300235750ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1:3IDATxwxUd*P6W{n ;37{^{0AڡZժINPM" :ͿT}^kwIcKCzF3 }w>f`FL1p`G0n`%%6A Pxp'%$``@0C0n郁[ @0|]0(,"`f 6za[q}aeF_x<7/Op{aS+".*o-iY){] Z%T`MrĜ,pa1, *s}}?*֭puPXsQWֲ8nfB7){[Ov[4#ͣ3=['R,إN^E/9ƭ@¡m,7~>t"H55TWS99wL\C".u{4>8ɻ~9dnޡ?\j^)uEV?V5S܇Nzq0H2[Ew4˿ o-"ݢ uKEڿExwMRjȦzs}^ܖ4%lܓܟ`듈bM5MJZēS'K^* ٘%jGA8 EMy;;z@zҒWě^IQvu ^JY=z[Rj條.aG ۯB/b66)Z5VmiPڧHM;fe_ڷV(HP"^v.0F`LJcxNwg[U3Ez==; |O~P0d cTتFOrkξFVu3/>Lk/k.HW|WI:ot45E} ̝6I zdqpE<^>LWsO]g!.)[!x̥- :dʰM>lp<\wAcSj/ǘ难.eo[e%+Y]in>O/0k3 |K<:lv0xx\9Hu0&UK3]J,?BUHJ똵=KV,h]&bK}o[`moٯ ݧ7XۉSϛ 3 =<4b$2W1jUEn g :kْʚ7rk)hr&䗚 >+ZWvdHx=c0s|A3y)?wC&X[EʾjVmC'NJ6q 5f"Bm5ɯgW+>Pw/Z:DM]vɇ0;`8,XxUek0tw CFKY%%M;0\~ьa1?u_8wݎY;2愾 { G/7+ݾ;tA*}bDWkG0Xbk#=unl8kc]Msf Y .o/-i% |-Hf7ɕW>7rG؅9<$LZ- .>19|vhs]7,^6F!\'=hgBU˗^*lsN-g~Sgqm o] nNJbk~ ?$W)r[a3ƴ1y]%<9bv#̣FLV >;u+ؑ==h~C8)x +t޻Ӑ銧&8΍<mZKC>mWM$ugNwIPGt[ō싾okD],jrRgcDM6')Jh$j/>阚 ٔ۳d]Zc/%ˆk~ kY^6*>?/9o+wxC]Ryz-Ɏޡ?Z1kg6xCeMre^;U%[Vԅxɧ&f>cWt#݋ۥNrڗS[QtYtҷR$_)qUH4crgO)^(?ʩ[֔}JWm̾p\H:.fg.Gu0Fw@~:Fǭ0(io5KX igYؗw Ib4AԴӲKh |e̓qՉUG3 R7(x4k{\0+l{YŗPb'&Z1YRHg5Dc$  NnjΏi^[ OSN3Vy^ V0v2g Շo}BaYE= 2}Er|Q*ɼL4eaQJyuI?+Ya &ӄcc E/ت ] !v\0ov*[饓A1c,6ٷUXeӇ Í W < ctqSUMyBAc tyfޘ䓲+f͌'rwf*Lq{Qp4 [ ?(;_ܚTzEޚSVc5{3dc%XE [[+a-.WŞ2=YE9.͇%nIj[<2= I̟?!҇h&zZlW|Y~ûjynο$a؃!Vò+ݙ]*3&LɫSցoM*j_7vwN3qKw? q`{$ח;UzYnvYRy|$pDox/l24RJQӃ+RIx=Bba JN;уt$9N݂V%u/ɭ~/!5ÌU߶,# "'aa&8 )gyOFoqϺ ^^e(y!|WrGW |.v<Ο"#g.eGIK +bkIxA1"6* }]q"F6ep6s2*hI'z!1n7pa3#t ܅}W{xғN*">7Ynd8G@y 6U-q ]8@)l/o6ޫX8'{K5l~_3Amg,Z|R -\b[:Fn֨rGz/ԝ tD?o{3FN}EMͼZٛ<*+e3ɪseɹ(Ca{Zfrab|ɰylѱ;]Պ7$-[2lΘ'u0lg eA!ٶZS)J_?ѺrJ q orr\{ݣK_ot&.myU*wm!=p\6ؐNOr ncO 1~mDA+=˻MBkaigaa^40z|9Aߥc t` 0St<$p1̞& *K^g+CAP 3PS=Ñ<.Bק F>) 5Rm=Q{If;_X!x8sGNp/lZ[]K_l|"hs}{35Х_:֮fXdCqNꢊ?2J|x-3>Ї)k)j_H(hPX}.HE\jn1%t`xp-;ƴ3?+l]BAŗM>`o0 1aJ[$V甛.+-.!-9;=ێ&wOX'[ "lgvAe? _ACfj5 C#ijIٙf 孹(^cE0YI0O&9L{pp6Ign~_vؕ*}[_|P"^ O1|G^^duY`,¤.ByDJ7ś t5࿣8.m+ JV'U,tUIv356'⭌g/ua=,`$':8dC@йj{-[&dE\N-i'4cJZ䭙U^-K>luq#L '7x{U2]4hSsf0WoKά x5:͈R* _won #-IaW}W-])]YG_ ShaZXc(mg9=`ILEڭ`uiJeIO46i˸tmFszm8Yҥ{M5MJ!`~BK0q*oJs[US9fn)jR|*-dj8b$CW}zZtỄmܼAL#YC3# &?ѽaN!k:iڃQSfF o MB X]N7~xk>'pʬ} ]O ҕMc%Cܑ=G 7XQa2Q 0l.y3w3w3vȍAbO+v{f1S}M-[Y:F~_N18|։%iۆZﵲ)kdSxƱcbdJ q:fAِi'9G0toq9BuuVcW9fX#6`_QKO52GuH߀1UέtQ1%tN q*U2vd߿E5FnO;ɹT S/'<ֿS'2b[O̤Ǻ݅1IB'uzdQqNYnuxf3FZ#-f! + ?'Go6'pNckRJה yE^xxAqf=tb/ֺ 7շyku0Gl" 2iv Ƥ?BoaSmW5Ӟ$I XS>"j/ky?HQ;'VNw2+xՑf^œQ>@m \됱'kaZjȴZl/]u3j|n4@P1aq“#fg1'x^A^|Mҙӳ* (i6Rgiy9ʱ=7ce| -> ߒ?QcMn-|4_o7F%#½\_f.74Il& g+:zL9O1[O`T0h[1V%$2Xժ勗,Ϭ PbZqGZ|*Jg|*ުmC%okNɰWʮ~Nqx8 O<[ȍCl?Bck^iX9wkvJ_1ŗVU^I<蜻lY_wKvoܩ5nc& s,! ʷ>6ר}VɩyNPtYó**—-zw^/hM5mOR27~N3ƱĮL mCZjS!?/?Z5~?]gmqp5ԫF?Gg05@ Nu 5dSJ;5KIw$TӤ͕ -3FY$9:F0ԩ%/j̍A`p^绢tMҩ_%Us㿭DBqv`WU|!cGE\~~ I{ G5CCՋ6n.M>o s]1"j NeEPعQCzu{QdV7JgQfKަ|+ Q ~Yj+奫ʜs7ޢ=Q?p۳ 7x)z<\I=OyJ;kIG ` LЁ־ v'<7ξiMCFŧu˭;&zH7_o \6^.pZe:69: C0/%Ěiuy۳eekJ#&7lW^L8~%ŗץhY֚q}5U[ Gb3UMi5yMqT6|$iEMyuuBVzuړ.\_s6xTcbEĕ Mrjx˼\:hCdrf x`3ZIs#_tI^$8~fХGf x῏R1`iԔsÆ=CM4l7P2C1L b*` ` `s&!@0a㶶`%n` ` `  :X0@0- @0 @0 @0  :~04`;sfკ ` ` `  ` &f@0|5mI00 @0 @0 @0x Ǫn6,`;H( ` ` a!L@0 @0 @0 `@0 @0|GY @0 @0 @0  `T p`eTÝ` ` `C(X  * ` ` `@0 ` j  Ø ` `jfE.%tEXtdate:create2012-12-02T14:38:45+01:00{e%tEXtdate:modify2012-09-21T00:53:03+02:00w/tEXtSoftwarewww.inkscape.org<IENDB`calamares-3.2.41.1/src/modules/locale/images/timezone_8.0.png000066400000000000000000000434041410275732300235710ustar00rootroot00000000000000PNG  IHDR T=gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsE1EIDATxu|Tw@FHqwɜ31@8076TnAQBa`? `DEQڰY)u귺M~ ~|}{տ9#~I:_ܢzPWY%<*{[ M!fEݙVU~b][[Xܦ<_*l?I#YZ֧F^u@|]҅?/j3smༀ,ǹR/h煨A”Hr˻sŪ:-/<.ih&wTps|`Z!o}0"ωxlA }WX>#u_~vSx}_WV;*OJrTY ]V 3׈B4"_!vRM-=rt Kڤ|sŭ-TG K>A8}u|-ZiA~*g-\'.Z-J:"$o*^厧:0)I|xj;׫Dea*#sL1B&D+׉LGM;Tڴ\ɐKܐ(80)?:(U!}7ys[|wUҮ7Ј0mlk 7:s%m'LU/U> K4fUgw_٥iCA!\<ݤ<*@Գ'6ˋʐP֩:[)c 1wIfTn|סpX[&FY$q*'o"vZ jՂ_Ik⛽-,X+e\5tZQ[R_?˝li{JڥN_ο|BiNyGu}mnNAB7JhbFq3{@;5QԜ|bpƶ_`'H!h7J%mһ90TwV.;:P:L;y pM -|bh~K:wGrDb^u܍eGWLωeҧE-{ |㝓\E Q\HNU#~.Z>#vvMX1>ոCw%շ{gJŭһٍA;,l&(=Jיf6sxSȴSY%̚8\հpJ.i?ܧlP<6 KݾwRy UBb_nX(( jݕB*IBDB <ύ\JiBX3 + 8)}k[hrrjSF34)I|ŰY13zrR#<:qe!~Jpy[?}9Seފڀ +Uf)=u ;[pѺq3 }[pUGr?ӝ#شD..^h ,[Ybڙ!ozr`(jMZa|ӯCR/bvCi{ߖu]%ewʻJ3CIՉiU:;~w ] G {gS)?A!R{$ꕨXV*cW>睹.La[״+_.d kDUXQ!UgX<*N}&t?}7WPRb:&ޜCG*.BIN!9A3T˕a) } }T7vˁjseS5(FzSjO}.>)j y3)ꏚ=RMWyR<_}J;2AȹAv.Z'P W#Z2_ӆ:ޫ =ӟ7W)=?/͂h+6yV?Sۤv?Gҹ٨oLڠ?`ߙw4׿yh[qĿ_I!3nUK"q砘A"S8{~~7uJ})TҹFA41۰k~ƦD 9Š7=6`í0tWbI]/;zrRI''Bޯ8QcY뱰*g"wW3(iJ*<"?aP*EeE')UzW^\sbJ j<$rqŖ=RYtC*#렪 G^J|WBHY,XBIm[z!rJ6+# ׋ZٍAG-buNryUMhx[>90r"(s_CvwmZ!K٥{OݢݨR(5b?*<<~47 z7d~fea5GF*ujWqKKu{=euJJ7N_]>JW+=},cyN'oU6st"Uǔȹњb5l,jvwK9I:WZ,g$O甴f;kW)3..ԝ%D &@l/$T ^G LoIoZ;.$WY;w.PRcA]g wϮfBթ {=>[7,Y21t%&gz Yܰq9/ Pywd_ϒӘ{S[L^o*1jŶq3 KE`w0ngn7sK1Wu@uaVrwIݦ~Y&8}J8aB=N[bSw+%V,YxԨ_ v ыTBp.WL9FL.?"Ѡ<"SU+H(nޗ_i8 #soKzȿ*NHKgKڤ7>_?rTEfQV kꮧorNwJUV'V4IOT{˴MlU< qGsN;PI\%>&/Y|J[XX7]'>| qxvb\7:Q JTo *j(8zð?rǤDLBloW8sw/r<)uY ЄrW/4m"73*g $ C|yIK G~7hیA'RrCs38 nzg7Sxb[bReUGZ]=U%}ӤjܯܖTzôMb3죱˜ €,]*6K!yY\LrѬS~WqBHMGv.I39,Hގ>73*"ݍ]UJaco #r;tOg4(W\Ҧ[Y~'8߰*myWp0nuV΄ΪSBCIӂ3-' O;Z!BHe78~Ӝ-S>/ܴM7Iߔz!^:T!CV Dž-Y%쒶/eƲu'.U656Ղ )tww  (|q<7*WX;g2E'zWvdޫ(_\rh[bhgnc8!vB73ʜ&XTqkJ6:mhC`nӹeMlL:,uv5]'6D?|(^\wڍ*1gztc-ˊW/\;-sOU'ǔfoE-!s;'&8;t61O N*{r,%T/3pxțb*'!H.TԮuN;hٕnglZ{^\wm?lf8?ѠNH7tӼ;NsDacʑҍ92[u6N]r7Cp; YseuZ:_w|ҶsS벶Ĭ,\#V/$0'19vbyN*OFWYg{i ]_*>u9?"pa}?wbgYU:O??gAB5&)Wmc?d!_;>MoR%Yyg$:7yY96Kcg؛:Y ?yzqMasɒ?U?CBQ/tN=lwKr/vP"05dH7ç^41vZ͌6\W^]ų.]"cl%_W?CCέ?CPJ[-{cʻTݦ$/j ͸CvL`@s,Ieй[~]31EO`@`k',u{XytutJ}.>S!#}C]a~Rv(ߥcBY Rwi=UUl{c  CtsRyRuY|6Ǭȗ#/wH9j 0WnmK$Fcv?(i>?>7Q7{do&0W'Uvreqh:wՒw]wy=nr9?زKQ".VyR:_qNT~BQi%ٔK`@-v #w:16sСA{ 9 T/TyiVS37jjSw: 3AmT ^:&Lg ,'Dtww w= L7Z_O~.X` ̈;lj%~W&ZT.CQK.uLi T~äqۓG}lb(.lCDO~_  L([;%: &?Wr_)uobWY}npD;V:ҿiFx>۸Dža.CT_ JTu $䖹;5 m:[aȀ݂[9+ H/$@>`Պeپ_ (nة5i?j eC40c(1nQ)iS[v?Q薹>ܢ/*\\-}S40c$V^鼇3 IQWZvzdȐG.%gxkQNJ_,nT|A^|R:g5&]`nyL#o YxdI`~<,jqBwf+էrGIg9 [Bi-7Gӎפ<VQ:kXX&\ʅ^Y“v8;E);˧F}n 5g\ rURozjgQoTj>!SAyiKb\UEk)H'8U.v6~u7$2] ]{. y/l~C1|R u<;+<6վ_?]ZC9d4hPK87|A!ڍbA~5s؝7ƝQw4䵬7kZ%ܢXRd9ͰZҎ{SMͺ) QGΚ0}}XinPwZ1~#2ԩ6qqnrf]1ʀ)_xE4UiӮŒEAB3ƭUTuә䑄bWe-j*x)1Ztɝ{SRaBdk6} Vkzn˖S79a~–`KCg,4y@ߴTVes=!9a_CCcU<X8cEⶐ:C:8!sڮiXd kӷU--ܘdi4^g 699liz֬^u9HZݐy '՟4{M7Vh4Uۦ^>0(l yp-ay'0yjg QluxU畷9M}b`( ~oƲ =2N|mƅ.:Akoj;kCR-k{rvmyc9,T˻1)+T^G O.K;3౉wXØbIٛZ )?f!|~}Q<%}VuJ:JҥczPaȄ0!tMpAOLr 7N:sL{ca)\SP?N9aSq {UEKB3><Kؕ}]1/UQU-S.X.Ք/4>3maϜy'4N-kZbMg,Osښ霺/%cKfye>s쌟m 0=0dKUfDݠ_?Ѳ;%>U=;kTFU8uooͻ2eny״9kk+_\*O?->,_3篛w&w<,<$ u3 nMs3ܲ)NP R^b#s/\y7B|ѷ@xN.? /ï0 (_\1}iN Z-\vۛ:5NTU}VY(j WZu}%'k ezӃL{b{An/FT7-wrT$QL; d rM~'s=5ZC m>/ Ud7ҿ*v~ajzjCJvE*8%s_ܬT$=N)9ˊMZ3kKWe|Yas1+-<6%!G>Fs`Q`l4hH% XE.eSm5S.gj5=kh{J{:o*a5>ʹ33RwIeOƮJW!9Umhk/^X`:lg$<;K6:z┄zCx\"{cas/ock7-vN)W[VS~vyJ }AiGcV^$\-_e`x?t^钯0^KT5qr®K0J 6? mY ۵?&,\,k1LIb`.9d`3sؤWm-Re` jI:y .5Foy 5RA:-uGߐ]wn0( s7CioUv.GeFV;tB`>`JX%ꏪN]6,|VԟįrMo4  I[5:=<69BdaCUXnԇwSyJ̼+}rC(E*^yg@Qi95Y/k]qB -\jW+@䑉uXѥdTLΤЍ>^Zn/M!1.bNlEU{'EJz/O*wlc:>Ze KX_՘GUx\XpakW{N ssp9u9 :;cF.{cV+2gWͷ7u1VؤHC?Ԡ;>-=bII#mbcOؤiw]kLqP0OѯJ7K1 6aHOTdzU|ɷ>K3LeOK1+-] ki763i3:ypK}ԝIRwYĝnߒci=|lb}Op/aoLezc!*7q/Cb{ ǕwIh6ݳR/.j0꒎'m0qڕh>,̯ [(zEᚐڂbu<spD7.li#a}WJۥ-oh띿)ܢ9tl_=liG{ ҷ gѰYvOMĦ˒w^['lfsJ2@оN=Ω {c[:KNZol< 'mgE>feE KMIqe9d4!Sbw*)_=_#>=`NK۰VT\qRI)Wu򖪝ک3>15zWg:>iީT)}(V&/Vϭ3~bWnGх֤nSO;Cl4gv}=0h)r?VVuu߷ _{㗧6;ZQK V{KQ.Lk貮aW# g[]~4Gi}\a7̷3a̽1+ D.(lo20􄆔ɮ3r%M܍ʖf<=ɼ++dnkF}}qÄsws>A0m-}sЩ778[_ edBk`pIOsIk4%9/0t˨˲>V?%qO#/ù@e?3)n{.ԮvXGZʊUMqMߗҬݔR*iCl[&{ӑdvԙ Ϻr>gËM%;奩{Oi6elr0Z~4ٷ`qzV%z90hkG{s>ꞧmn.acobĪuCk@_*4eo}iUٛ-TLY̧`Eh_J%>Kʂge2N pVI%bCB䌧G@/4db]80όg>;N>'ubq崅+"f79e="jhקy.0lI2;´3jqfeyeٛrSw{dΟ oig鴆_lRg-TbOKгqχ,5ab̖=FwTko5G Ҭ^yu9Sv[/]!mX]31>3.9bg(ɇuj\қL/IkH9UEk*96&֌RT@/4+gINcJvKce n:'KI=b~FQ/'3vL9fp0}R} znʑ[{`E` @` ת ډڑ6@`…Y2+pXp0}Bxv$ |[uه-3RwYar]ZuO508>i ZS5cʴk2Z}F~IJ9MR(ZX6Vi-Cԩ!ٛ'̩_Ь~…<%<)ugSl~ArxzO`Htnf{,mӗflP*~tE a-LKz)jI ҬCVqBmg-蓁A^ЦUϚ_bæun64/L:fk#skj&O)_86a9`I-% eR'DfG]{1.q̫e&I,}࠿Yt$uvƠ .-.G ( "2n\d9x⭁0̡k,/=j=Oaa Y&;Ql5 1 !S_Jw6e߼7$M*[s(_<;ji[# }`{!} w5jYuqt;"TnPמ_%oGL$%m@2Ų+uk+7Tyq4\:7 tSzfQe2O)>QZO [dSҏow&τ<Ty*8?,#B#$:rE؅1L0MŬ = No~8շ[WL  S ,uU `o@Q]'EaG/ })S hP"=dOrSTv]7Dn <.wK_~Kbh:%|ic4~)qS`x;Ԧ;f_`mKGT;8qsв+oK'x_ߖ`BAe|s0 aGojmv)K #?:M}!ecuI'% k~T0WO%^.S5Jo;|4ewKpUqtv!7V/^34W4ܩ-~W .=0%bY8 Nl';h.G[2IpN`<0T?4Kz3Zo=t9J%oW !8% í`Z%&TЅp?ㄬ)bYݬB)[r6IA7$nGPuKaK K#]& BN2 $l =/ѷ<[%٧?]h>;3 |}c_ɻvGéBȭ };-uffZ$l T_Q.K+ޯ-~PsG^Ay'z)u\)82[.u2:KK-_w8d]Yk֯E֜ z h03 bʛ?sV`vōw,Y`!j|1W rLd~̏stlcmue!`N'?ϧ{kʓ6D풍N- *(/~切n*/| x;!ugwipӴYP1Jݾ=Bw"OJ`0Mz[(D Y|wo"~ I- MlYo"b/6-,6<ORHZ (*?QHd]PA9{'C.!9~ǽH Ʈ/3 .xp[{gv$is@rυ.ZO&hLcBwra~ؼ9gek<#y6~=6 m!EcZ6(fMА˼*[dpO4eN̬l}ҏg_\sWf˟n7Yډ-!udt|X;+ydb7ӵI J5솬WSw=q# 7U~?$mE˲S !)J3;s׳Xprwpm JC]TySQEb ۛ蕁BA{}G{*$1qyCYV/-+v"#ªff 9uR\uKg U /˾twx= ܙ 94Cr9YcMiAgsq7ݓr(e{Q+[GNZ- f)nm<\ȵfOҁi{Z]n_tUyEYEWğܑ3qh8!tlajyK!ŋǮ 3dnYeX T x-e{ >.ʚMƏum9Ć!Q++,SwU<"y88~m'ӹgņ5sg<";/4^߮)f;$`&'(fM# &y.7ˬO^+ g˽0ӟM~$\4#tQUt2_?\X{eM!_l MeBx}ԔbX2D K);eɺ}ߞ5_\P$c"m7k] U11e&S'$اQ I;Coo~ʛٰtKHGy^A~B̚'doMշ\:xHU{u0;dcRA&Ze0/uҕfL"D.n}ûau[ܳު%ʛwoLJwO֧Ҟcs.C􇢅G~~!q>/EWş-bݷ1RT1{$n֔48~%nv ;^L{87eVG+DžW;̈^-[. ;y[HU@] O+aMbL^l:y?;9A+|T;AV#1\{V*yMFpgx/ۯwZbܬS[ʛ^?eGS6Yx7!\`*j]mCYV;÷39C[Oz\(y[ªE'9 2a!lx|3eӻ H&@wT-xj tL# cla3x1|f\6ӿycLpo|a5&,:u^}M{ ]'쎛dGؼU.S| 'g1~$A }h]ugV{^-efʼKt#߉ې6&|MDX+q A1 W 媯 f)e:"7ǘ?Xk7Y5NuQ-(| *ٺGo)wN?w:g]YZw4Q}@{AYhhV^mzV9+5+)z܉YWmBA Ź#~TyS~ʞ#+ZMYm,<nY Lxck96A;4.gXPk4$M/w>3h8$& x |7 B-l.\ ]M?~\(i-}iq?mlEopNoUn^;*mW,+oV-*;Uƈn˗O>jnxvkI+WfQ?+nX+i?ÃhSUku7*fYd-RW*a[eMaJK]2/״by_a9sG^۬):'.[WX6l[ wџX]6ytb×87\hVjr.OVv v[iek\UݛrSEka9w"VXe ա+V<݊{Ҩ%mӴdڻ}aܕߗVj?. ?Nؖ~$ewڥk M*Vv JY:CXSd<~"]H$I:Cl[ịō'ŁAɵ?dXݢw3*U}Jl<֤:='_X^xU]P;ҧ8 @ DDz7V.r:amIndl8KQJ}1쏙c>-HWF(abYHq*uU3\2N85}΂t'2 ݫ ]x0/yWጓ17J Ej^Uqc;-+/V:3qoVn-Vʶ}qoJ0,;oZ6wyo^;U^/n }W:3@jCHM?6.^[1leEGr ՞ys<~XB @ ѤzZYk찕;/Z7eKZ_d[Hͺ钥u4t`׮h!8f*XCy9/-m.f_%LBgC SFUB^vSvړ Ьr0\ֆ,ئ:{/fc.F}`^`xp'E.3] fs01fqN'_tؚtԧ mp`:f0<ް\Qۦئ}qNcrJ77zGt?`vNn, ]dax'Gicm:3`hVd3,*Vs$1[xU,rOZ|Y0v0p0CQWokۻx+ ʖGN-5`0`#,zB1-bk$A&:z~$s0,}{3c/>=vA(X hm9 5`GGǽ `:1 zX-r44i ͗p45swB`:F0d8oAv$/h0< AA:S9``SMϾ`06 'ce b=3& Xmڹ'ǁ`:; =`ԼWt {elLqUEM0/D0f G~2}u`ඪ>o `@0  ` `@0   `  @ &Sz`l8蛕!5jvd/Yh&-t7ɻNJ"~ts%}KF](h:$/n04h eI첤vK^L&0~a?41xt`JXS.bS= 3+_qH1r9#Vg=xR'f /_a<;q vd7|arJ=)&?+ubuxߑ3@ ;ͭ{2Nwet׿v8ӍZ1}G[ d6 [qwLjJ57=- @ {4~M}.qYjtr&x!aYa`p2^3]]HޕyJ;CIͺ#I7V._%5`'ϖA\8?Z9I:3Hv@Ŧʥ;/GL (HaŽWז/^[3zr_pTi8_{-p͔.K$[i0rnhoK G'햌;oE)WAS%=+T, @;4tW~%v NxNܮ?y:ɻ4gso2{U녲^Gr4M*;ʹOW!m`}hV٩/g{ѓYs&{Ιd_wE[D<[@92?ܬtN?U"le=.1w>\9pEl<Z]نZp5c7{/b ӭNv7qYZhV^Y_^פz;6jpeM{䦺7ESrS=x"MSFUkpKMSH / ucK'2Cs4[6lQ$nXpu9 Ygk}w]hVk+d+ lߒzſ{C<ď2OǽW@'Y٪:Ų>E˒vf-oM?_9㊮`&m%/ڍiCU/p9閽/-{GNhh4oиK=hk G}9 n9/kc6oWH>ؒ'A}pɝMmqC(hvvKS7i%Bշ^|p,eɖb} KNt=xgЭf2)@ Bӄ>æ~!<xx]8)j~ ]&yft&hon0ߚT6SE [2+o#fl)ۯ>4?z[~ꃾIc3z$aQAߤS]P٤VڤQڦX'К:k`}[4K3@G|Y .p1t32$ΎX8?~94*`8=$Xt$n聖 Cuua^Y5Q3Bꢬ"7'̉ږ<)vĜ S|rL^8S:YDo_:?$7Ӄ-:wL&Zz~i>?lmb/sT";gq8a㝖L57nbU+W&O u;&( ]Z4>\A{H?7=R_&_*4wMtF U 9Q<2TSr$u! AH~v*|q4x>F>C[?#HZX_ ܘ1F,.=V9.L>4GaY3gָqvIH 0t_WeBg<=:^{˃AsU3'j[9h0E0˖E3SFo_:#&a¸ɏ qI=fM=z[/$IרIߑ1 @idi#f͝9fâVGn cm_R,E9_ o̼@{,z ۭ]+-}çwzҽw1 {N^0/v۴suΆ'DvJ)0< /)tM0Z4 }GY SK3: hD7BmRN՗u 8:+味xEaӄ~~>li%vOIHTF6W x &L&г]u"-L9?:#ݞW xIFeri=^9[ޓW0`aĬ aVK iâX^7zw,᥾#Z[瀱 I˜i޼0j{ac$}ia]m&4Ta4/aD^0;aQhASJL?#U2>WM+=?rpaS{KAyG[ |amn0p#|A^sUk:4XrnM3B- 5жoFX-2OרBA]yh3BTq`lQ9燱{5M͂iA: ɟ=hg aL#x=fdC{BKA:[$a'sX̎\覱>۷gm7lfPo2??l3gw:j0 4'AwMerJ5iytjw2-"UE]0+ۡ}_j+ ``̍ݝseCM^3*rs삥ܢ*a ګ Ɂ-u_WϏߕ1kzPY>tdxyq{Dm:h։'y 6']ΰq}ƍE^`h&ZN<*:*j~b7u)si+th OM$iEmUPNt:u6Z^`p44&^۠~Jyqq9d/<bÍO~kK&Mki5i/<{GYX5yK^ /w}Vgvp5SsoNlI/_?~mY %Lޒh ')~1GVW2Utg'+<[4l⧫~qaqSwOoSNϦa!apcm _2H(8IGo_nAɯY`]g&O-K_fi5ɔ`h/d xW W=̝fӃNٚwm@Ļ6F03﹒Gg<]XfЁSw4q" _O&މam` A0 `>I i5G'%Z&NF/c:ٻ/]` .^ϪW2sѡ![x%>:%ں(m4,TEUϕ/<8QLiQ0@үpͰφ7&i١9V>*xAk08v_Y]K/:oH )} Yak/ݔQP͔ye.zއzvlҦ.d??'cXdms◳wϘ%79~ߜ0h*s®֊P1wO8`**{?^v`D +m:Nsv/7)[lmm S|p(ގw@ЫNQ("Kھ].I=Yçn˻gʶ 6K{Z0|,ghx}tH,̼s^9e ɸz3E4oqS:׵MR⛺YX ]zɸ5eW6o:|1̹.ͻk}W}+:;|:Wn/H:a)oV;O~%=¹_= ӞАW0-(6Ե Tn/") 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 # multi-level selector, e.g. "a.b" will select the timezone # from data "{a: {b: "Europe/Amsterdam" } }". # - each part of the string split by "." characters is used as # a key into the JSON data. # In XML: # - 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*; # generally this includes a string value with the timezone # in / format. For services that return data which # does not follow the conventions of "suitable data" described # below, *selector* may be used to pick different data. # # Suitable JSON data looks like # ``` # {"time_zone":"America/New_York"} # ``` # Suitable XML data looks like # ``` # Europe/Brussels # ``` # # To accommodate providers of GeoIP timezone data with peculiar timezone # naming conventions, the following cleanups are performed automatically: # - backslashes are removed # - spaces are replaced with _ # # 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. # 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 # calamares-3.2.41.1/src/modules/locale/locale.qrc000066400000000000000000000034321410275732300213420ustar00rootroot00000000000000 images/bg.png images/pin.png images/timezone_0.0.png images/timezone_1.0.png images/timezone_2.0.png images/timezone_3.0.png images/timezone_3.5.png images/timezone_4.0.png images/timezone_4.5.png images/timezone_5.0.png images/timezone_5.5.png images/timezone_5.75.png images/timezone_6.0.png images/timezone_6.5.png images/timezone_7.0.png images/timezone_8.0.png images/timezone_9.0.png images/timezone_9.5.png images/timezone_10.0.png images/timezone_10.5.png images/timezone_11.0.png images/timezone_12.0.png images/timezone_12.75.png images/timezone_13.0.png images/timezone_-1.0.png images/timezone_-2.0.png images/timezone_-3.0.png images/timezone_-3.5.png images/timezone_-4.0.png images/timezone_-4.5.png images/timezone_-5.0.png images/timezone_-5.5.png images/timezone_-6.0.png images/timezone_-7.0.png images/timezone_-8.0.png images/timezone_-9.0.png images/timezone_-9.5.png images/timezone_-10.0.png images/timezone_-11.0.png calamares-3.2.41.1/src/modules/locale/locale.schema.yaml000066400000000000000000000020351410275732300227540ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/locale/timezonewidget/000077500000000000000000000000001410275732300224305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/locale/timezonewidget/TimeZoneImage.cpp000066400000000000000000000120371410275732300256340ustar00rootroot00000000000000/* === 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 ); } calamares-3.2.41.1/src/modules/locale/timezonewidget/TimeZoneImage.h000066400000000000000000000045511410275732300253030ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/locale/timezonewidget/timezonewidget.cpp000066400000000000000000000127111410275732300261740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "locale/TimeZone.h" #include "utils/Logger.h" #include "timezonewidget.h" #include #include #ifdef DEBUG_TIMEZONES // Adds a label to the timezone with this name #define ZONE_NAME QStringLiteral( "zone" ) #endif 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 ); // Font font.setPointSize( 12 ); font.setBold( false ); // Images background = QImage( ":/images/bg.png" ); pin = QImage( ":/images/pin.png" ); // Set size setMinimumSize( background.size() ); setMaximumSize( background.size() ); setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); } void TimeZoneWidget::setCurrentLocation( const TimeZoneData* location ) { if ( location == m_currentLocation ) { return; } 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() << Logger::SubEntry << "pixel x" << pos.x() << "pixel y" << pos.y(); #endif currentZoneImage = timeZoneImages.find( pos ); // Repaint widget repaint(); } //### //### Private //### struct PainterEnder { QPainter& p; ~PainterEnder() { p.end(); } }; void TimeZoneWidget::paintEvent( QPaintEvent* ) { QFontMetrics fontMetrics( font ); QPainter painter( this ); PainterEnder painter_end { painter }; painter.setRenderHint( QPainter::Antialiasing ); painter.setFont( font ); // Draw background painter.drawImage( 0, 0, background ); // Draw zone image painter.drawImage( 0, 0, currentZoneImage ); if ( !m_currentLocation ) { return; } #ifdef DEBUG_TIMEZONES QPoint point = getLocationPosition( m_currentLocation ); // Draw latitude lines for ( int y_lat = -50; y_lat < 80; y_lat += 5 ) { QPen p( y_lat ? Qt::black : Qt::red ); p.setWidth( 0 ); painter.setPen( p ); 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 ); painter.drawImage( point.x() - pin.width() / 2, point.y() - pin.height() / 2, pin ); // Draw text and box // .. 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 ); }; #else 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(); QRect rect = QRect( point.x() - textWidth / 2 - 5, point.y() - textHeight - 8, textWidth + 10, textHeight - 2 ); if ( rect.x() <= 5 ) { rect.moveLeft( 5 ); } if ( rect.right() >= width - 5 ) { rect.moveRight( width - 5 ); } if ( rect.y() <= 5 ) { rect.moveTop( 5 ); } if ( rect.y() >= height - 5 ) { rect.moveBottom( height - 5 ); } painter.setPen( QPen() ); // no pen painter.setBrush( QColor( 40, 40, 40 ) ); painter.drawRoundedRect( rect, 3, 3 ); painter.setPen( Qt::white ); painter.drawText( rect.x() + 5, rect.bottom() - 4, m_currentLocation ? m_currentLocation->tr() : QString() ); #endif } void TimeZoneWidget::mousePressEvent( QMouseEvent* event ) { if ( event->button() != Qt::LeftButton ) { return; } int mX = event->pos().x(); int mY = event->pos().y(); auto distance = [&]( const CalamaresUtils::Locale::TimeZoneData* zone ) { 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( closest ); } } calamares-3.2.41.1/src/modules/locale/timezonewidget/timezonewidget.h000066400000000000000000000045061410275732300256440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef TIMEZONEWIDGET_H #define TIMEZONEWIDGET_H #include "TimeZoneImage.h" #include "locale/TimeZone.h" #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 TimeZoneData = CalamaresUtils::Locale::TimeZoneData; 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: /** @brief The location has changed by mouse click */ void locationChanged( const TimeZoneData* location ); private: QFont font; QImage background, pin, currentZoneImage; TimeZoneImageList timeZoneImages; const CalamaresUtils::Locale::ZonesModel* m_zonesData; const TimeZoneData* m_currentLocation = nullptr; // Not owned by me void paintEvent( QPaintEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; }; #endif // TIMEZONEWIDGET_H calamares-3.2.41.1/src/modules/localecfg/000077500000000000000000000000001410275732300200525ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/localecfg/main.py000066400000000000000000000141211410275732300213470ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import os import re import shutil import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring locales.") RE_IS_COMMENT = re.compile("^ *#") def is_comment(line): """ Does the @p line look like a comment? Whitespace, followed by a # is a comment-only line. """ return bool(RE_IS_COMMENT.match(line)) RE_TRAILING_COMMENT = re.compile("#.*$") RE_REST_OF_LINE = re.compile("\\s.*$") def extract_locale(line): """ Extracts a locale from the @p line, and returns a pair of (extracted-locale, uncommented line). The locale is the first word of the line after uncommenting (in the human- readable text explanation at the top of most /etc/locale.gen files, the locales may be bogus -- either "" or e.g. "Configuration") """ # Remove leading spaces and comment signs line = RE_IS_COMMENT.sub("", line) uncommented = line.strip() fields = RE_TRAILING_COMMENT.sub("", uncommented).strip().split() if len(fields) != 2: # Not exactly two fields, can't be a proper locale line return "", uncommented else: # Drop all but first field locale = RE_REST_OF_LINE.sub("", uncommented) return locale, uncommented def rewrite_locale_gen(srcfilename, destfilename, locale_conf): """ Copies a locale.gen file from @p srcfilename to @p destfilename (this may be the same name), enabling those locales that can be found in the map @p locale_conf. Also always enables en_US.UTF-8. """ en_us_locale = 'en_US.UTF-8' # Get entire source-file contents text = [] with open(srcfilename, "r") as gen: text = gen.readlines() # we want unique values, so locale_values should have 1 or 2 items locale_values = set(locale_conf.values()) locale_values.add(en_us_locale) # Always enable en_US as well enabled_locales = {} seen_locales = set() # Write source out again, enabling some with open(destfilename, "w") as gen: for line in text: c = is_comment(line) locale, uncommented = extract_locale(line) # Non-comment lines are preserved, and comment lines # may be enabled if they match a desired locale if not c: seen_locales.add(locale) else: for locale_value in locale_values: if locale.startswith(locale_value): enabled_locales[locale] = uncommented gen.write(line) gen.write("\n###\n#\n# Locales enabled by Calamares\n") for locale, line in enabled_locales.items(): if locale not in seen_locales: gen.write(line + "\n") seen_locales.add(locale) for locale in locale_values: if locale not in seen_locales: gen.write("# Missing: %s\n" % locale) def run(): """ Create locale """ import libcalamares locale_conf = libcalamares.globalstorage.value("localeConf") if not locale_conf: locale_conf = { 'LANG': 'en_US.UTF-8', 'LC_NUMERIC': 'en_US.UTF-8', 'LC_TIME': 'en_US.UTF-8', 'LC_MONETARY': 'en_US.UTF-8', 'LC_PAPER': 'en_US.UTF-8', 'LC_NAME': 'en_US.UTF-8', 'LC_ADDRESS': 'en_US.UTF-8', 'LC_TELEPHONE': 'en_US.UTF-8', 'LC_MEASUREMENT': 'en_US.UTF-8', 'LC_IDENTIFICATION': 'en_US.UTF-8' } install_path = libcalamares.globalstorage.value("rootMountPoint") if install_path is None: libcalamares.utils.warning("rootMountPoint is empty, {!s}".format(install_path)) return (_("Configuration Error"), _("No root mount point is given for
{!s}
to use." ).format("localecfg")) target_locale_gen = "{!s}/etc/locale.gen".format(install_path) target_locale_gen_bak = target_locale_gen + ".bak" target_locale_conf_path = "{!s}/etc/locale.conf".format(install_path) target_etc_default_path = "{!s}/etc/default".format(install_path) # restore backup if available if os.path.exists(target_locale_gen_bak): shutil.copy2(target_locale_gen_bak, target_locale_gen) libcalamares.utils.debug("Restored backup {!s} -> {!s}" .format(target_locale_gen_bak, target_locale_gen)) # run locale-gen if detected; this *will* cause an exception # if the live system has locale.gen, but the target does not: # in that case, fix your installation filesystem. if os.path.exists('/etc/locale.gen'): rewrite_locale_gen(target_locale_gen, target_locale_gen, locale_conf) libcalamares.utils.target_env_call(['locale-gen']) libcalamares.utils.debug('{!s} done'.format(target_locale_gen)) # write /etc/locale.conf with open(target_locale_conf_path, "w") as lcf: for k, v in locale_conf.items(): lcf.write("{!s}={!s}\n".format(k, v)) libcalamares.utils.debug('{!s} done'.format(target_locale_conf_path)) # write /etc/default/locale if /etc/default exists and is a dir if os.path.isdir(target_etc_default_path): with open(os.path.join(target_etc_default_path, "locale"), "w") as edl: for k, v in locale_conf.items(): edl.write("{!s}={!s}\n".format(k, v)) libcalamares.utils.debug('{!s} done'.format(target_etc_default_path)) return None calamares-3.2.41.1/src/modules/localecfg/module.desc000066400000000000000000000004671410275732300222060ustar00rootroot00000000000000# 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. --- type: "job" name: "localecfg" interface: "python" script: "main.py" noconfig: true calamares-3.2.41.1/src/modules/localeq/000077500000000000000000000000001410275732300175535ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/localeq/CMakeLists.txt000066400000000000000000000026051410275732300223160ustar00rootroot00000000000000# === 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. option( DEBUG_TIMEZONES "Debug-friendly timezone widget." OFF ) 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 ) include_directories( ${_locale} ) calamares_add_plugin( localeq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES LocaleQmlViewStep.cpp ${_locale}/LocaleConfiguration.cpp ${_locale}/Config.cpp ${_locale}/SetTimezoneJob.cpp RESOURCES localeq.qrc LINK_PRIVATE_LIBRARIES Qt5::Network SHARED_LIB ) calamares-3.2.41.1/src/modules/localeq/LocaleQmlViewStep.cpp000066400000000000000000000032431410275732300236210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 20182020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "LocaleQmlViewStep.h" #include "utils/Logger.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( LocaleQmlViewStepFactory, registerPlugin< LocaleQmlViewStep >(); ) LocaleQmlViewStep::LocaleQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( std::make_unique< Config >( this ) ) { } QObject* LocaleQmlViewStep::getConfig() { return m_config.get(); } QString LocaleQmlViewStep::prettyName() const { return tr( "Location" ); } QString LocaleQmlViewStep::prettyStatus() const { return m_config->prettyStatus(); } bool LocaleQmlViewStep::isNextEnabled() const { return true; } bool LocaleQmlViewStep::isBackEnabled() const { return true; } bool LocaleQmlViewStep::isAtBeginning() const { return true; } bool LocaleQmlViewStep::isAtEnd() const { return true; } Calamares::JobList LocaleQmlViewStep::jobs() const { return m_config->createJobs(); } void LocaleQmlViewStep::onActivate() { m_config->setCurrentLocation(); // Finalize the location QmlViewStep::onActivate(); } void LocaleQmlViewStep::onLeave() { m_config->finalizeGlobalStorage(); } void LocaleQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } calamares-3.2.41.1/src/modules/localeq/LocaleQmlViewStep.h000066400000000000000000000023111410275732300232610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LOCALE_QMLVIEWSTEP_H #define LOCALE_QMLVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" #include class PLUGINDLLEXPORT LocaleQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: explicit LocaleQmlViewStep( 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; virtual void onActivate() override; virtual void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; QObject* getConfig() override; private: std::unique_ptr< Config > m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LocaleQmlViewStepFactory ) #endif calamares-3.2.41.1/src/modules/localeq/Map.qml000066400000000000000000000212601410275732300210040ustar00rootroot00000000000000/* === 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 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 name: "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: 5 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)) Label { x: parent.mouseX - width -5 y: parent.mouseY - height - 5 text: "%1, %2".arg( parent.coordinate.latitude).arg(parent.coordinate.longitude) } 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.") } } } calamares-3.2.41.1/src/modules/localeq/Offline.qml000066400000000000000000000163541410275732300216610ustar00rootroot00000000000000/* === 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.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 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 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.") } } } calamares-3.2.41.1/src/modules/localeq/i18n.qml000066400000000000000000000122211410275732300210430ustar00rootroot00000000000000/* === 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.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami Item { width: parent.width height: parent.height focus: true MouseArea { anchors.fill: parent } Rectangle { id: textArea x: 28 y: 14 anchors.fill: parent Kirigami.Theme.backgroundColor: Kirigami.Theme.backgroundColor Column { id: languages x: 130 y: 40 Rectangle { width: 250 height: 140 color: "#d3d3d3" 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 clip: true ListView { id: list1 focus: true model: config.supportedLocales currentIndex: -1 highlight: Rectangle { color: Kirigami.Theme.highlightColor } delegate: Text { text: modelData MouseArea { hoverEnabled: true anchors.fill: parent cursorShape: Qt.PointingHandCursor onEntered: { color: "#0000ff" } 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: "#d3d3d3" 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 clip: true ListView { id: list2 width: 180; height: 200 focus: true model: config.supportedLocales currentIndex: -1 highlight: Rectangle { color: Kirigami.Theme.highlightColor } delegate: Text { text: modelData 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 } } } } calamares-3.2.41.1/src/modules/localeq/img/000077500000000000000000000000001410275732300203275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/localeq/img/chevron-left-solid.svg000066400000000000000000000007421410275732300245570ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/localeq/img/chevron-left-solid.svg.license000066400000000000000000000001541410275732300261750ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 https://github.com/FortAwesome/Font-Awesome SPDX-License-Identifier: CC-BY-4.0 calamares-3.2.41.1/src/modules/localeq/img/locale.svg000077500000000000000000004527701410275732300223310ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/src/modules/localeq/img/locale.svg.license000066400000000000000000000001401410275732300237230ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/localeq/img/minus.png000066400000000000000000000002611410275732300221670ustar00rootroot00000000000000PNG  IHDR``w8 pHYs+cIDATx 0h=eq;|f_~zZ=  &@L1b\dhIENDB`calamares-3.2.41.1/src/modules/localeq/img/minus.png.license000066400000000000000000000001401410275732300236040ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/localeq/img/pin.svg000066400000000000000000000071021410275732300216360ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/src/modules/localeq/img/pin.svg.license000066400000000000000000000001401410275732300232520ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/localeq/img/plus.png000066400000000000000000000007431410275732300220240ustar00rootroot00000000000000PNG  IHDR``HgAMA a cHRMz&u0`:pQ<bKGD̿ pHYs  tIME7ZIDATx1 @@щX.聼r(&h,g%q~$Iԩcw:[sk>cNt @/` @/` @/`ZǸ%&_6x&fL1%SR3% @ky -HLctAɛh @3f4h -L$I$mMAS%tEXtdate:create2020-04-22T10:15:07+00:00g%tEXtdate:modify2020-04-22T10:15:07+00:00:tIENDB`calamares-3.2.41.1/src/modules/localeq/img/plus.png.license000066400000000000000000000001401410275732300234340ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/localeq/localeq.conf000066400000000000000000000070731410275732300220510ustar00rootroot00000000000000# 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 # provided by the 'tzdata' package of your Distribution. # # Distributions using systemd can list available # time zones by using the timedatectl command. # timedatectl list-timezones # # The starting timezone (e.g. the pin-on-the-map) when entering # the locale page can be set through keys *region* and *zone*. # If either is not set, defaults to America/New_York. # region: "America" zone: "New_York" # System locales are detected in the following order: # # - /usr/share/i18n/SUPPORTED # - localeGenPath (defaults to /etc/locale.gen if not set) # - 'locale -a' output # # Enable only when your Distribution is using an # custom path for locale.gen # #localeGenPath: "PATH_TO/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. # # 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 # Ubiquity's XML providers (which use "TimeZone"). # # 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. # # In JSON: # - if the string contains "." characters, this is used as a # multi-level selector, e.g. "a.b" will select the timezone # from data "{a: {b: "Europe/Amsterdam" } }". # - each part of the string split by "." characters is used as # a key into the JSON data. # In XML: # - 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. # # # An HTTP(S) request is made to *url*. The request should return # valid data in a suitable format, depending on *style*; # generally this includes a string value with the timezone # in / format. For services that return data which # 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"} # ``` # Suitable XML data looks like # ``` # Europe/Brussels # ``` # # To accommodate providers of GeoIP timezone data with peculiar timezone # naming conventions, the following cleanups are performed automatically: # - 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. # geoip: style: "json" url: "https://geoip.kde.org/v1/calamares" selector: "" # leave blank for the default calamares-3.2.41.1/src/modules/localeq/localeq.qml000066400000000000000000000054561410275732300217200ustar00rootroot00000000000000/* === 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 import QtQuick 2.10 import QtQuick.Controls 2.10 import QtQuick.Layouts 1.3 import org.kde.kirigami 2.7 as Kirigami 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() } } 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 } } calamares-3.2.41.1/src/modules/localeq/localeq.qrc000066400000000000000000000005451410275732300217060ustar00rootroot00000000000000 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 calamares-3.2.41.1/src/modules/luksbootkeyfile/000077500000000000000000000000001410275732300213465ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/luksbootkeyfile/CMakeLists.txt000066400000000000000000000005241410275732300241070ustar00rootroot00000000000000# === 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 SHARED_LIB NO_CONFIG ) calamares-3.2.41.1/src/modules/luksbootkeyfile/LuksBootKeyFileJob.cpp000066400000000000000000000156461410275732300255340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "LuksBootKeyFileJob.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/UMask.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" LuksBootKeyFileJob::LuksBootKeyFileJob( QObject* parent ) : Calamares::CppJob( parent ) { } LuksBootKeyFileJob::~LuksBootKeyFileJob() {} QString LuksBootKeyFileJob::prettyName() const { return tr( "Configuring LUKS key file." ); } struct LuksDevice { LuksDevice( const QMap< QString, QVariant >& pinfo ) : isValid( false ) , isRoot( false ) { if ( pinfo.contains( "luksMapperName" ) ) { QString fs = pinfo[ "fs" ].toString(); QString mountPoint = pinfo[ "mountPoint" ].toString(); if ( !mountPoint.isEmpty() || fs == QStringLiteral( "linuxswap" ) ) { isValid = true; isRoot = mountPoint == '/'; device = pinfo[ "device" ].toString(); passphrase = pinfo[ "luksPassphrase" ].toString(); } } } bool isValid; bool isRoot; QString device; QString passphrase; }; /** @brief Extract the luks passphrases setup. * * Given a list of partitions (as set up by the partitioning module, * so there's maps with keys inside), returns just the list of * luks passphrases for each device. */ static QList< LuksDevice > getLuksDevices( const QVariantList& list ) { QList< LuksDevice > luksItems; for ( const auto& p : list ) { if ( p.canConvert< QVariantMap >() ) { LuksDevice d( p.toMap() ); if ( d.isValid ) { luksItems.append( d ); } } } return luksItems; } struct LuksDeviceList { LuksDeviceList( const QVariant& partitions ) : valid( false ) { if ( partitions.canConvert< QVariantList >() ) { devices = getLuksDevices( partitions.toList() ); valid = true; } } QList< LuksDevice > devices; bool valid; }; static const char keyfile[] = "/crypto_keyfile.bin"; 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 ) { cWarning() << "Could not create LUKS keyfile:" << r.getOutput() << "(exit code" << r.getExitCode() << ')'; return false; } // Give ample time to check that the file was created correctly r = CalamaresUtils::System::instance()->targetEnvCommand( { "ls", "-la", "/" } ); cDebug() << "In target system after creating LUKS file" << r.getOutput(); return true; } static bool setupLuks( const LuksDevice& d ) { auto r = CalamaresUtils::System::instance()->targetEnvCommand( { "cryptsetup", "luksAddKey", d.device, keyfile }, QString(), d.passphrase, std::chrono::seconds( 15 ) ); if ( r.getExitCode() != 0 ) { cWarning() << "Could not configure LUKS keyfile on" << d.device << ':' << r.getOutput() << "(exit code" << r.getExitCode() << ')'; return false; } return true; } static QVariantList partitions() { Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage(); return globalStorage->value( QStringLiteral( "partitions" ) ).toList(); } static bool hasUnencryptedSeparateBoot() { const QVariantList partitions = ::partitions(); for ( const QVariant& partition : partitions ) { QVariantMap partitionMap = partition.toMap(); QString mountPoint = partitionMap.value( QStringLiteral( "mountPoint" ) ).toString(); if ( mountPoint == QStringLiteral( "/boot" ) ) { return !partitionMap.contains( QStringLiteral( "luksMapperName" ) ); } } return false; } Calamares::JobResult LuksBootKeyFileJob::exec() { const auto* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs ) { return Calamares::JobResult::internalError( "LuksBootKeyFile", "No GlobalStorage defined.", Calamares::JobResult::InvalidConfiguration ); } if ( !gs->contains( "partitions" ) ) { cError() << "No GS[partitions] key."; return Calamares::JobResult::internalError( "LuksBootKeyFile", tr( "No partitions are defined." ), Calamares::JobResult::InvalidConfiguration ); } LuksDeviceList s( gs->value( "partitions" ) ); if ( !s.valid ) { cError() << "GS[partitions] is invalid"; return Calamares::JobResult::internalError( "LuksBootKeyFile", tr( "No partitions are defined." ), Calamares::JobResult::InvalidConfiguration ); } cDebug() << "There are" << s.devices.count() << "LUKS partitions"; if ( s.devices.count() < 1 ) { cDebug() << Logger::SubEntry << "Nothing to do for LUKS."; return Calamares::JobResult::ok(); } auto it = std::partition( s.devices.begin(), s.devices.end(), []( const LuksDevice& d ) { return d.isRoot; } ); for ( const auto& d : s.devices ) { cDebug() << Logger::SubEntry << ( d.isRoot ? "root" : "dev." ) << d.device << "passphrase?" << !d.passphrase.isEmpty(); } if ( it == s.devices.begin() ) { // Then there was no root partition cDebug() << Logger::SubEntry << "No root partition."; return Calamares::JobResult::ok(); } // /boot partition is not encrypted, keyfile must not be used if ( hasUnencryptedSeparateBoot() ) { 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."; return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Root partition %1 is LUKS but no passphrase has been set." ).arg( s.devices.first().device ) ); } if ( !generateTargetKeyfile() ) { return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Could not create LUKS key file for root partition %1." ).arg( s.devices.first().device ) ); } for ( const auto& d : s.devices ) { if ( !setupLuks( d ) ) return Calamares::JobResult::error( tr( "Encrypted rootfs setup error" ), tr( "Could not configure LUKS key file on partition %1." ).arg( d.device ) ); } return Calamares::JobResult::ok(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( LuksBootKeyFileJobFactory, registerPlugin< LuksBootKeyFileJob >(); ) calamares-3.2.41.1/src/modules/luksbootkeyfile/LuksBootKeyFileJob.h000066400000000000000000000016541410275732300251730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef LUKSBOOTKEYFILEJOB_H #define LUKSBOOTKEYFILEJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include /** @brief Creates the LUKS boot key file and adds it to the cryptsetup. * * This job has no configuration, because it takes everything * from the global storage settings set by others. */ class PLUGINDLLEXPORT LuksBootKeyFileJob : public Calamares::CppJob { Q_OBJECT public: explicit LuksBootKeyFileJob( QObject* parent = nullptr ); ~LuksBootKeyFileJob() override; QString prettyName() const override; Calamares::JobResult exec() override; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( LuksBootKeyFileJobFactory ) #endif // LUKSBOOTKEYFILEJOB_H calamares-3.2.41.1/src/modules/luksopenswaphookcfg/000077500000000000000000000000001410275732300222275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.conf000066400000000000000000000003621410275732300271730ustar00rootroot00000000000000# 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) configFilePath: /etc/openswap.conf calamares-3.2.41.1/src/modules/luksopenswaphookcfg/luksopenswaphookcfg.schema.yaml000066400000000000000000000005061410275732300304470ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/luksopenswaphookcfg/main.py000066400000000000000000000065401410275732300235320ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # 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) calamares-3.2.41.1/src/modules/luksopenswaphookcfg/module.desc000066400000000000000000000002431410275732300243530ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "luksopenswaphookcfg" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/machineid/000077500000000000000000000000001410275732300200545ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/machineid/CMakeLists.txt000066400000000000000000000007021410275732300226130ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares_add_test( machineidtest SOURCES Tests.cpp MachineIdJob.cpp Workers.cpp ) calamares-3.2.41.1/src/modules/machineid/MachineIdJob.cpp000066400000000000000000000121551410275732300230400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "MachineIdJob.h" #include "Workers.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "GlobalStorage.h" #include "JobQueue.h" #include MachineIdJob::MachineIdJob( QObject* parent ) : Calamares::CppJob( parent ) { } MachineIdJob::~MachineIdJob() {} QString MachineIdJob::prettyName() const { return tr( "Generate machine-id." ); } Calamares::JobResult MachineIdJob::exec() { QString root; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( gs && gs->contains( "rootMountPoint" ) ) { root = gs->value( "rootMountPoint" ).toString(); } else { cWarning() << "No *rootMountPoint* defined."; return Calamares::JobResult::internalError( tr( "Configuration Error" ), tr( "No root mount point is set for MachineId." ), Calamares::JobResult::InvalidConfiguration ); } QString target_systemd_machineid_file = QStringLiteral( "/etc/machine-id" ); QString target_dbus_machineid_file = QStringLiteral( "/var/lib/dbus/machine-id" ); const CalamaresUtils::System* system = CalamaresUtils::System::instance(); // Clear existing files for ( const auto& entropy_file : m_entropy_files ) { system->removeTargetFile( entropy_file ); } if ( m_dbus ) { system->removeTargetFile( target_dbus_machineid_file ); } if ( m_systemd ) { system->removeTargetFile( target_systemd_machineid_file ); } //Create new files 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, entropy_file ); if ( !r ) { return r; } } 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 ) { return r; } } if ( m_dbus ) { if ( !system->createTargetParentDirs( target_dbus_machineid_file ) ) { cWarning() << "Could not create DBus data-directory."; } if ( m_dbus_symlink && QFile::exists( root + target_systemd_machineid_file ) ) { auto r = MachineId::createDBusLink( root, target_dbus_machineid_file, target_systemd_machineid_file ); if ( !r ) { return r; } } else { auto r = MachineId::createDBusMachineId( root, target_dbus_machineid_file ); if ( !r ) { return r; } } } return Calamares::JobResult::ok(); } void MachineIdJob::setConfigurationMap( const QVariantMap& map ) { m_systemd = CalamaresUtils::getBool( map, "systemd", false ); m_dbus = CalamaresUtils::getBool( map, "dbus", false ); if ( map.contains( "dbus-symlink" ) ) { m_dbus_symlink = CalamaresUtils::getBool( map, "dbus-symlink", false ); } else if ( map.contains( "symlink" ) ) { m_dbus_symlink = CalamaresUtils::getBool( map, "symlink", false ); cWarning() << "MachineId: configuration setting *symlink* is deprecated, use *dbus-symlink*."; } // else it's still false from the constructor // ignore it, though, if dbus is false m_dbus_symlink = m_dbus && m_dbus_symlink; m_entropy_copy = CalamaresUtils::getBool( map, "entropy-copy", false ); m_entropy_files = CalamaresUtils::getStringList( map, "entropy-files" ); if ( CalamaresUtils::getBool( map, "entropy", false ) ) { cWarning() << "MachineId:: configuration setting *entropy* is deprecated, use *entropy-files* instead."; m_entropy_files.append( QStringLiteral( "/var/lib/urandom/random-seed" ) ); } m_entropy_files.removeDuplicates(); } CALAMARES_PLUGIN_FACTORY_DEFINITION( MachineIdJobFactory, registerPlugin< MachineIdJob >(); ) calamares-3.2.41.1/src/modules/machineid/MachineIdJob.h000066400000000000000000000030241410275732300225000ustar00rootroot00000000000000/* === 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 MACHINEIDJOB_H #define MACHINEIDJOB_H #include #include #include #include "CppJob.h" #include "utils/PluginFactory.h" #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 ); ~MachineIdJob() override; QString prettyName() const override; Calamares::JobResult exec() override; 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_copy = false; ///< copy from host system QStringList m_entropy_files; ///< names of files to write }; CALAMARES_PLUGIN_FACTORY_DECLARATION( MachineIdJobFactory ) #endif // MACHINEIDJOB_H calamares-3.2.41.1/src/modules/machineid/Tests.cpp000066400000000000000000000165711410275732300216740ustar00rootroot00000000000000/* === 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 "MachineIdJob.h" #include "Workers.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include // Internals of Workers.cpp extern int getUrandomPoolSize(); class MachineIdTests : public QObject { Q_OBJECT public: MachineIdTests() {} ~MachineIdTests() override {} private Q_SLOTS: void initTestCase(); void testConfigEntropyFiles(); void testCopyFile(); void testPoolSize(); void testJob(); }; void 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() { QTemporaryDir tempRoot( QDir::tempPath() + QStringLiteral( "/test-root-XXXXXX" ) ); cDebug() << "Temporary files as" << QDir::tempPath(); cDebug() << "Temp dir file at " << tempRoot.path(); QVERIFY( !tempRoot.path().isEmpty() ); // This will pretend to be the host system QTemporaryDir tempISOdir( QDir::tempPath() + QStringLiteral( "/test-live-XXXXXX" ) ); QVERIFY( QDir( tempRoot.path() ).mkpath( tempRoot.path() + tempISOdir.path() ) ); QFile source( tempRoot.filePath( "example" ) ); QVERIFY( !source.exists() ); source.open( QIODevice::WriteOnly ); source.write( "Derp" ); source.close(); QCOMPARE( source.size(), 4 ); QVERIFY( source.exists() ); // This should fail since "example" isn't standard in our test directory auto r0 = MachineId::copyFile( tempRoot.path(), "example" ); QVERIFY( !r0 ); const QString sampleFile = QStringLiteral( "CMakeCache.txt" ); if ( QFile::exists( sampleFile ) ) { auto r1 = MachineId::copyFile( tempRoot.path(), sampleFile ); // Also fail, because it's not an absolute path QVERIFY( !r1 ); QVERIFY( QFile::copy( sampleFile, tempISOdir.path() + '/' + sampleFile ) ); auto r2 = MachineId::copyFile( tempRoot.path(), tempISOdir.path() + '/' + sampleFile ); QVERIFY( r2 ); } } void MachineIdTests::testPoolSize() { #ifdef Q_OS_FREEBSD // It hardly makes sense, but also the /proc entry is missing QCOMPARE( getUrandomPoolSize(), 512 ); #else // Based on a sample size of 1, Netrunner QCOMPARE( getUrandomPoolSize(), 4096 ); #endif } void 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(); // 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", tempRoot.path() ); // Prepare part of the target filesystem { QVERIFY( system->createTargetDirs( "/etc" ) ); auto r = system->createTargetFile( "/etc/machine-id", "Hello" ); QVERIFY( !r.failed() ); QVERIFY( r ); QVERIFY( !r.path().isEmpty() ); } MachineIdJob job( nullptr ); QVERIFY( !job.prettyName().isEmpty() ); QVariantMap config; config.insert( "dbus", true ); job.setConfigurationMap( config ); { auto r = job.exec(); QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists QVERIFY( QFile::exists( tempRoot.filePath( "var/lib/dbus" ) ) ); // but the target dir exists } config.insert( "dbus-symlink", true ); job.setConfigurationMap( config ); { auto r = job.exec(); QVERIFY( !r ); // It's supposed to fail, because no dbus-uuidgen executable exists QVERIFY( QFile::exists( tempRoot.filePath( "var/lib/dbus" ) ) ); // but the target dir exists // These all (would) fail, because the chroot isn't viable #if 0 QVERIFY( QFile::exists( "/tmp/var/lib/dbus/machine-id" ) ); QFileInfo fi( "/tmp/var/lib/dbus/machine-id" ); QVERIFY( fi.exists() ); QVERIFY( fi.isSymLink() ); 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 } QTEST_GUILESS_MAIN( MachineIdTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/modules/machineid/Workers.cpp000066400000000000000000000122631410275732300222200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "Workers.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Entropy.h" #include "utils/Logger.h" #include /// @brief Returns a recommended size for the entropy pool (in bytes) STATICTEST int getUrandomPoolSize() { QFile f( "/proc/sys/kernel/random/poolsize" ); constexpr const int minimumPoolSize = 512; int poolSize = minimumPoolSize; if ( f.exists() && f.open( QIODevice::ReadOnly | QIODevice::Text ) ) { QByteArray v = f.read( 16 ); if ( v.length() > 2 ) { if ( v.endsWith( '\n' ) ) { v.chop( 1 ); } bool ok = false; poolSize = v.toInt( &ok ); if ( !ok ) { poolSize = minimumPoolSize; } } } return ( poolSize >= minimumPoolSize ) ? poolSize : minimumPoolSize; } namespace MachineId { static inline bool isAbsolutePath( const QString& fileName ) { return fileName.startsWith( '/' ); } Calamares::JobResult copyFile( const QString& rootMountPoint, const QString& fileName ) { if ( !isAbsolutePath( fileName ) ) { return Calamares::JobResult::internalError( QObject::tr( "File not found" ), QObject::tr( "Path
%1
must be an absolute path." ).arg( fileName ), 0 ); } QFile f( fileName ); if ( !f.exists() ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), fileName ); } if ( !f.copy( rootMountPoint + fileName ) ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), rootMountPoint + fileName ); } return Calamares::JobResult::ok(); } Calamares::JobResult createNewEntropy( int poolSize, const QString& rootMountPoint, const QString& fileName ) { QFile entropyFile( rootMountPoint + fileName ); if ( entropyFile.exists() ) { cWarning() << "Entropy file" << ( rootMountPoint + fileName ) << "already exists."; return Calamares::JobResult::ok(); // .. anyway } if ( !entropyFile.open( QIODevice::WriteOnly ) ) { return Calamares::JobResult::error( QObject::tr( "File not found" ), QObject::tr( "Could not create new random file
%1
." ).arg( fileName ) ); } QByteArray data; CalamaresUtils::EntropySource source = CalamaresUtils::getEntropy( poolSize, data ); entropyFile.write( data ); entropyFile.close(); if ( entropyFile.size() < data.length() ) { cWarning() << "Entropy file is" << entropyFile.size() << "bytes, random data was" << data.length(); } if ( data.length() < poolSize ) { cWarning() << "Entropy data is" << data.length() << "bytes, rather than poolSize" << poolSize; } if ( source != CalamaresUtils::EntropySource::URandom ) { cWarning() << "Entropy data for pool is low-quality."; } return Calamares::JobResult::ok(); } Calamares::JobResult createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, const QString& fileName ) { if ( kind == EntropyGeneration::CopyFromHost ) { if ( QFile::exists( fileName ) ) { auto r = copyFile( rootMountPoint, fileName ); if ( r ) { return r; } else { cWarning() << "Could not copy" << fileName << "for entropy, generating new."; } } else { cWarning() << "Host system entropy does not exist at" << fileName; } } int poolSize = getUrandomPoolSize(); return createNewEntropy( poolSize, rootMountPoint, fileName ); } static Calamares::JobResult runCmd( const QStringList& cmd ) { auto r = CalamaresUtils::System::instance()->targetEnvCommand( cmd ); if ( r.getExitCode() ) { return r.explainProcess( cmd, std::chrono::seconds( 0 ) ); } return Calamares::JobResult::ok(); } Calamares::JobResult createSystemdMachineId( const QString& rootMountPoint, const QString& fileName ) { Q_UNUSED( rootMountPoint ) Q_UNUSED( fileName ) return runCmd( QStringList { QStringLiteral( "systemd-machine-id-setup" ) } ); } Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const QString& fileName ) { Q_UNUSED( rootMountPoint ) Q_UNUSED( fileName ) return runCmd( QStringList { QStringLiteral( "dbus-uuidgen" ), QStringLiteral( "--ensure" ) } ); } Calamares::JobResult createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName ) { Q_UNUSED( rootMountPoint ) return runCmd( QStringList { QStringLiteral( "ln" ), QStringLiteral( "-sf" ), systemdFileName, fileName } ); } } // namespace MachineId calamares-3.2.41.1/src/modules/machineid/Workers.h000066400000000000000000000040631410275732300216640ustar00rootroot00000000000000/* === 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 WORKERS_H #define WORKERS_H #include "Job.h" /// @brief Utility functions for doing the random-data stuff for MachineId namespace MachineId { /** @brief Utility functions * * These probably belong in libcalamares, since they're general utilities * for moving files around in the target system. */ /// @brief Copy @p fileName from host into target system at @p rootMountPoint Calamares::JobResult copyFile( const QString& rootMountPoint, const QString& fileName ); /** @brief Entropy functions * * The target system may want to pre-seed the entropy pool with a suitable * chunk of entropy data. During installation we have lots of disk access * so plenty of entropy -- this is used mostly be Debian. */ /// @brief How to generate entropy (bool-like) enum class EntropyGeneration { New, CopyFromHost }; /// @brief Creates a new entropy file @p fileName in the target system at @p rootMountPoint Calamares::JobResult createNewEntropy( int poolSize, const QString& rootMountPoint, const QString& fileName ); /// @brief Create an entropy file @p fileName in the target system at @p rootMountPoint Calamares::JobResult createEntropy( const EntropyGeneration kind, const QString& rootMountPoint, const QString& fileName ); /** @brief MachineID functions * * Creating UUIDs for DBUS and SystemD. */ /// @brief Create a new DBus UUID file Calamares::JobResult createDBusMachineId( const QString& rootMountPoint, const QString& fileName ); /// @brief Symlink DBus UUID file to the one from systemd (which must exist already) Calamares::JobResult createDBusLink( const QString& rootMountPoint, const QString& fileName, const QString& systemdFileName ); Calamares::JobResult createSystemdMachineId( const QString& rootMountPoint, const QString& fileName ); } // namespace MachineId #endif // WORKERS_H calamares-3.2.41.1/src/modules/machineid/machineid.conf000066400000000000000000000032511410275732300226450ustar00rootroot00000000000000# 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: # - a systemd machine-id file (hence the name of the Calamares module) # with a random UUID. # - a dbus machine-id file (or, optionally, link to the one from systemd) # - an entropy file # --- # 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 # 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 calamares-3.2.41.1/src/modules/machineid/machineid.schema.yaml000066400000000000000000000011711410275732300241200ustar00rootroot00000000000000# 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 } calamares-3.2.41.1/src/modules/mkinitfs/000077500000000000000000000000001410275732300177575ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/mkinitfs/main.py000066400000000000000000000025101410275732300212530ustar00rootroot00000000000000#!/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) ) calamares-3.2.41.1/src/modules/mkinitfs/module.desc000066400000000000000000000002121410275732300220770ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mkinitfs" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/mount/000077500000000000000000000000001410275732300172755ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/mount/main.py000066400000000000000000000157651410275732300206110ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import tempfile import subprocess import os import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext 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_partition(root_mount_point, partition, partitions): """ Do a single mount of @p partition inside @p root_mount_point. """ # 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) 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: device = os.path.join("/dev/mapper", partition["luksMapperName"]) if libcalamares.utils.mount(device, mount_point, fstype, partition.get("options", "")) != 0: libcalamares.utils.warning("Cannot mount {}".format(device)) # Special handling for btrfs subvolumes. Create the subvolumes listed in mount.conf if fstype == "btrfs" and partition["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: subprocess.check_call(['btrfs', 'subvolume', 'create', root_mount_point + s['subvolume']]) subprocess.check_call(["umount", "-v", root_mount_point]) device = partition["device"] if "luksMapperName" in partition: 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(): """ Mount all the partitions from GlobalStorage and from the job configuration. Partitions are mounted in-lexical-order of their mountPoint. """ 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("mount")) root_mount_point = tempfile.mkdtemp(prefix="calamares-root-") # Guard against missing keys (generally a sign that the config file is bad) extra_mounts = libcalamares.job.configuration.get("extraMounts") or [] extra_mounts_efi = libcalamares.job.configuration.get("extraMountsEfi") or [] if not extra_mounts and not extra_mounts_efi: libcalamares.utils.warning("No extra mounts defined. Does mount.conf exist?") if libcalamares.globalstorage.value("firmwareType") == "efi": extra_mounts.extend(extra_mounts_efi) # Add extra mounts to the partitions list and sort by mount points. # 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.sort(key=lambda x: x["mountPoint"]) for partition in mountable_partitions: mount_partition(root_mount_point, partition, partitions) libcalamares.globalstorage.insert("rootMountPoint", root_mount_point) # Remember the extra mounts for the unpackfs module libcalamares.globalstorage.insert("extraMounts", extra_mounts) calamares-3.2.41.1/src/modules/mount/module.desc000066400000000000000000000002251410275732300214210ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "mount" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/mount/mount.conf000066400000000000000000000032761410275732300213160ustar00rootroot00000000000000# 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 # listed here are **extra**. The filesystems listed in *extraMounts* # are mounted in all target systems. The filesystems listed in # *extraMountsEfi* are mounted in the target system **only** if # the host machine uses UEFI. --- # 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 (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 mountPoint: /proc - device: sys fs: sysfs mountPoint: /sys - device: /dev mountPoint: /dev options: bind - device: tmpfs fs: tmpfs mountPoint: /run - device: /run/udev mountPoint: /run/udev options: bind 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. btrfsSubvolumes: - mountPoint: / subvolume: /@ - mountPoint: /home subvolume: /@home - mountPoint: /var/cache subvolume: /@cache - mountPoint: /var/log subvolume: /@logcalamares-3.2.41.1/src/modules/mount/mount.schema.yaml000066400000000000000000000024241410275732300225640ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/mount/tests/000077500000000000000000000000001410275732300204375ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/mount/tests/1.global000066400000000000000000000004271410275732300217640ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" fs: "ext4" - device: "/dev/sdb2" mountPoint: "/home" fs: "ext4" - device: "/dev/sdb3" mountPoint: "" fs: "linuxswap" calamares-3.2.41.1/src/modules/mount/tests/1.job000066400000000000000000000002661410275732300212770ustar00rootroot00000000000000# 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. calamares-3.2.41.1/src/modules/mount/tests/2.global000066400000000000000000000002771410275732300217700ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" fs: "btrfs" # Expect a complaint and a default btrfs layout calamares-3.2.41.1/src/modules/mount/tests/2.job000066400000000000000000000002241410275732300212720ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Expect a complaint and a default btrfs layout because the # partitions use btrfs calamares-3.2.41.1/src/modules/mount/tests/3.global000066400000000000000000000002571410275732300217670ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 partitions: - device: "/dev/sdb1" mountPoint: "/" fs: "btrfs" partitionChoices: swap: file calamares-3.2.41.1/src/modules/mount/tests/3.job000066400000000000000000000002661410275732300213010ustar00rootroot00000000000000# 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. calamares-3.2.41.1/src/modules/mount/tests/4.global000066400000000000000000000003641410275732300217670ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/mount/tests/4.job000066400000000000000000000004221410275732300212740ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/000077500000000000000000000000001410275732300203105ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/netinstall/CMakeLists.txt000066400000000000000000000013321410275732300230470ustar00rootroot00000000000000# === 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 LoaderQueue.cpp NetInstallViewStep.cpp NetInstallPage.cpp PackageTreeItem.cpp PackageModel.cpp UI page_netinst.ui LINK_PRIVATE_LIBRARIES Qt5::Network SHARED_LIB ) calamares_add_test( netinstalltest SOURCES Tests.cpp Config.cpp LoaderQueue.cpp PackageTreeItem.cpp PackageModel.cpp LIBRARIES Qt5::Gui ) calamares-3.2.41.1/src/modules/netinstall/Config.cpp000066400000000000000000000117721410275732300222310ustar00rootroot00000000000000/* * 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: see the License-Identifier above. * */ #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/Retranslator.h" #include "utils/Variant.h" #include 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 { switch ( m_status ) { case Status::Ok: return QString(); case Status::FailedBadConfiguration: return tr( "Network Installation. (Disabled: Incorrect configuration)" ); case Status::FailedBadData: return tr( "Network Installation. (Disabled: Received invalid groups data)" ); case Status::FailedInternalError: 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)" ); } __builtin_unreachable(); } void Config::setStatus( Status s ) { m_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 ); if ( m_model->rowCount() < 1 ) { cWarning() << "NetInstall groups data was empty."; setStatus( Status::FailedNoData ); } else { setStatus( Status::Ok ); } } void Config::loadingDone() { if ( m_queue ) { 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 ); } calamares-3.2.41.1/src/modules/netinstall/Config.h000066400000000000000000000056471410275732300217020ustar00rootroot00000000000000/* * 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_CONFIG_H #define NETINSTALL_CONFIG_H #include "PackageModel.h" #include "locale/TranslatableConfiguration.h" #include "modulesystem/InstanceKey.h" #include #include #include class LoaderQueue; class Config : public QObject { Q_OBJECT 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 ); ~Config() override; void setConfigurationMap( const QVariantMap& configurationMap ); enum class Status { Ok, FailedBadConfiguration, FailedInternalError, FailedNetworkError, 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; } PackageModel* model() const { return m_model; } QString sidebarLabel() const; QString titleLabel() const; /** @brief Fill model from parsed data. * * Fills the model with a list of groups -- which can contain * subgroups and packages -- from @p groupData. */ void loadGroupList( const QVariantList& groupData ); /** @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 ); Q_SIGNALS: void statusChanged( QString status ); ///< Something changed void sidebarLabelChanged( QString label ); void titleLabelChanged( QString label ); void statusReady(); ///< Loading groups is complete 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; LoaderQueue* m_queue = nullptr; Status m_status = Status::Ok; bool m_required = false; }; #endif calamares-3.2.41.1/src/modules/netinstall/LoaderQueue.cpp000066400000000000000000000126061410275732300232340ustar00rootroot00000000000000/* * 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 ); } } calamares-3.2.41.1/src/modules/netinstall/LoaderQueue.h000066400000000000000000000040051410275732300226730ustar00rootroot00000000000000/* * 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 calamares-3.2.41.1/src/modules/netinstall/NetInstallPage.cpp000066400000000000000000000036251410275732300236740ustar00rootroot00000000000000/* * 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: see the License-Identifier above. * */ #include "NetInstallPage.h" #include "PackageModel.h" #include "ui_page_netinst.h" #include "JobQueue.h" #include "network/Manager.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Yaml.h" #include #include NetInstallPage::NetInstallPage( Config* c, QWidget* parent ) : QWidget( parent ) , m_config( c ) , ui( new Ui::Page_NetInst ) { ui->setupUi( this ); ui->groupswidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); ui->groupswidget->setModel( c->model() ); 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 ); } NetInstallPage::~NetInstallPage() {} void NetInstallPage::expandGroups() { auto* model = m_config->model(); // Go backwards because expanding a group may cause rows to appear below it for ( int i = model->rowCount() - 1; i >= 0; --i ) { auto index = model->index( i, 0 ); if ( model->data( index, PackageModel::MetaExpandRole ).toBool() ) { ui->groupswidget->setExpanded( index, true ); } } } void NetInstallPage::onActivate() { ui->groupswidget->setFocus(); } calamares-3.2.41.1/src/modules/netinstall/NetInstallPage.h000066400000000000000000000023141410275732300233330ustar00rootroot00000000000000/* * 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 NETINSTALLPAGE_H #define NETINSTALLPAGE_H #include "Config.h" #include "PackageModel.h" #include "PackageTreeItem.h" #include "locale/TranslatableConfiguration.h" #include #include #include class QNetworkReply; namespace Ui { class Page_NetInst; } class NetInstallPage : public QWidget { Q_OBJECT public: NetInstallPage( Config* config, QWidget* parent = nullptr ); ~NetInstallPage() override; void onActivate(); /** @brief Expand entries that should be pre-expanded. * * Follows the *expanded* key / the startExpanded field in the * group entries of the model. Call this after filling up the model. */ void expandGroups(); private: Config* m_config; Ui::Page_NetInst* ui; }; #endif // NETINSTALLPAGE_H calamares-3.2.41.1/src/modules/netinstall/NetInstallViewStep.cpp000066400000000000000000000053561410275732300245710ustar00rootroot00000000000000/* * 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 "NetInstallViewStep.h" #include "NetInstallPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( NetInstallViewStepFactory, registerPlugin< NetInstallViewStep >(); ) NetInstallViewStep::NetInstallViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new NetInstallPage( &m_config ) ) , m_nextEnabled( false ) { connect( &m_config, &Config::statusReady, this, &NetInstallViewStep::nextIsReady ); } NetInstallViewStep::~NetInstallViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString NetInstallViewStep::prettyName() const { return m_config.sidebarLabel(); #if defined( TABLE_OF_TRANSLATIONS ) __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" ); tr( "Browser software" ); tr( "Browser package" ); tr( "Web browser" ); tr( "Kernel" ); tr( "Services" ); tr( "Login" ); tr( "Desktop" ); tr( "Applications" ); tr( "Communication" ); tr( "Development" ); tr( "Office" ); tr( "Multimedia" ); tr( "Internet" ); tr( "Theming" ); tr( "Gaming" ); tr( "Utilities" ); #endif } QWidget* NetInstallViewStep::widget() { return m_widget; } bool NetInstallViewStep::isNextEnabled() const { return !m_config.required() || m_nextEnabled; } bool NetInstallViewStep::isBackEnabled() const { return true; } bool NetInstallViewStep::isAtBeginning() const { return true; } bool NetInstallViewStep::isAtEnd() const { return true; } Calamares::JobList NetInstallViewStep::jobs() const { return Calamares::JobList(); } void NetInstallViewStep::onActivate() { m_widget->onActivate(); } void NetInstallViewStep::onLeave() { m_config.finalizeGlobalStorage( moduleInstanceKey() ); } void NetInstallViewStep::nextIsReady() { m_nextEnabled = true; emit nextStatusChanged( true ); } void NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config.setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/netinstall/NetInstallViewStep.h000066400000000000000000000027111410275732300242260ustar00rootroot00000000000000/* * 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: see the License-Identifier above. * */ #ifndef NETINSTALLVIEWSTEP_H #define NETINSTALLVIEWSTEP_H #include "Config.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include class NetInstallPage; class PLUGINDLLEXPORT NetInstallViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit NetInstallViewStep( QObject* parent = nullptr ); ~NetInstallViewStep() override; QString prettyName() const override; QWidget* widget() 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; // Leaving the page; store all selected packages for later installation. void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; public slots: void nextIsReady(); private: Config m_config; NetInstallPage* m_widget; bool m_nextEnabled = false; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( NetInstallViewStepFactory ) #endif // NETINSTALLVIEWSTEP_H calamares-3.2.41.1/src/modules/netinstall/PackageModel.cpp000066400000000000000000000204211410275732300233270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "PackageModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "utils/Yaml.h" PackageModel::PackageModel( QObject* parent ) : QAbstractItemModel( parent ) { } PackageModel::~PackageModel() { delete m_rootItem; } QModelIndex PackageModel::index( int row, int column, const QModelIndex& parent ) const { if ( !m_rootItem || !hasIndex( row, column, parent ) ) { return QModelIndex(); } PackageTreeItem* parentItem; if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< PackageTreeItem* >( parent.internalPointer() ); } PackageTreeItem* childItem = parentItem->child( row ); if ( childItem ) { return createIndex( row, column, childItem ); } else { return QModelIndex(); } } QModelIndex PackageModel::parent( const QModelIndex& index ) const { if ( !m_rootItem || !index.isValid() ) { return QModelIndex(); } PackageTreeItem* child = static_cast< PackageTreeItem* >( index.internalPointer() ); PackageTreeItem* parent = child->parentItem(); if ( parent == m_rootItem ) { return QModelIndex(); } return createIndex( parent->row(), 0, parent ); } int PackageModel::rowCount( const QModelIndex& parent ) const { if ( !m_rootItem || ( parent.column() > 0 ) ) { return 0; } PackageTreeItem* parentItem; if ( !parent.isValid() ) { parentItem = m_rootItem; } else { parentItem = static_cast< PackageTreeItem* >( parent.internalPointer() ); } return parentItem->childCount(); } int PackageModel::columnCount( const QModelIndex& ) const { return 2; } QVariant PackageModel::data( const QModelIndex& index, int role ) const { if ( !m_rootItem || !index.isValid() ) { return QVariant(); } PackageTreeItem* item = static_cast< PackageTreeItem* >( index.internalPointer() ); switch ( role ) { case Qt::CheckStateRole: return index.column() == NameColumn ? ( item->isImmutable() ? QVariant() : item->isSelected() ) : QVariant(); case Qt::DisplayRole: return item->isHidden() ? QVariant() : item->data( index.column() ); case MetaExpandRole: return item->isHidden() ? false : item->expandOnStart(); default: return QVariant(); } } bool PackageModel::setData( const QModelIndex& index, const QVariant& value, int role ) { if ( !m_rootItem ) { return false; } if ( role == Qt::CheckStateRole && index.isValid() ) { PackageTreeItem* item = static_cast< PackageTreeItem* >( index.internalPointer() ); item->setSelected( static_cast< Qt::CheckState >( value.toInt() ) ); emit dataChanged( this->index( 0, 0 ), index.sibling( index.column(), index.row() + 1 ), QVector< int >( Qt::CheckStateRole ) ); } return true; } Qt::ItemFlags PackageModel::flags( const QModelIndex& index ) const { if ( !m_rootItem || !index.isValid() ) { return Qt::ItemFlags(); } if ( index.column() == NameColumn ) { PackageTreeItem* item = static_cast< PackageTreeItem* >( index.internalPointer() ); if ( item->isImmutable() ) { return QAbstractItemModel::flags( index ); //Qt::NoItemFlags; } return Qt::ItemIsUserCheckable | QAbstractItemModel::flags( index ); } return QAbstractItemModel::flags( index ); } QVariant PackageModel::headerData( int section, Qt::Orientation orientation, int role ) const { if ( orientation == Qt::Horizontal && role == Qt::DisplayRole ) { return ( section == NameColumn ) ? tr( "Name" ) : tr( "Description" ); } return QVariant(); } PackageTreeItem::List PackageModel::getPackages() const { if ( !m_rootItem ) { return PackageTreeItem::List(); } auto items = getItemPackages( m_rootItem ); for ( auto package : m_hiddenItems ) { if ( package->hiddenSelected() ) { items.append( getItemPackages( package ) ); } } return items; } PackageTreeItem::List PackageModel::getItemPackages( PackageTreeItem* item ) const { PackageTreeItem::List selectedPackages; for ( int i = 0; i < item->childCount(); i++ ) { auto* child = item->child( i ); if ( child->isSelected() == Qt::Unchecked ) { continue; } if ( child->isPackage() ) // package { selectedPackages.append( child ); } else { selectedPackages.append( getItemPackages( child ) ); } } return selectedPackages; } void PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* parent ) { for ( const auto& group : groupList ) { QVariantMap groupMap = group.toMap(); if ( groupMap.isEmpty() ) { continue; } 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" ).toList() ) { 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. 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 { item->setCheckable( true ); parent->appendChild( item ); } } } void PackageModel::setupModelData( const QVariantList& l ) { emit beginResetModel(); delete m_rootItem; m_rootItem = new PackageTreeItem(); setupModelData( l, m_rootItem ); emit endResetModel(); } calamares-3.2.41.1/src/modules/netinstall/PackageModel.h000066400000000000000000000041471410275732300230030ustar00rootroot00000000000000 /* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PACKAGEMODEL_H #define PACKAGEMODEL_H #include "PackageTreeItem.h" #include #include #include namespace YAML { class Node; } class PackageModel : public QAbstractItemModel { Q_OBJECT public: // Names for columns (unused in the code) static constexpr const int NameColumn = 0; static constexpr const int DescriptionColumn = 1; /* The only interesting roles are DisplayRole (with text depending * on the column, and MetaExpandRole which tells if an index * should be initially expanded. */ static constexpr const int MetaExpandRole = Qt::UserRole + 1; explicit PackageModel( QObject* parent = nullptr ); ~PackageModel() override; void setupModelData( const QVariantList& l ); QVariant data( const QModelIndex& index, int role ) const override; bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole ) override; Qt::ItemFlags flags( const QModelIndex& index ) const override; QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex& index ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; PackageTreeItem::List getPackages() const; PackageTreeItem::List getItemPackages( PackageTreeItem* item ) const; private: friend class ItemTests; void setupModelData( const QVariantList& l, PackageTreeItem* parent ); PackageTreeItem* m_rootItem = nullptr; PackageTreeItem::List m_hiddenItems; }; #endif // PACKAGEMODEL_H calamares-3.2.41.1/src/modules/netinstall/PackageTreeItem.cpp000066400000000000000000000167261410275732300240220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PackageTreeItem.h" #include "utils/Logger.h" #include "utils/Variant.h" /** @brief Should a package be selected, given its parent's state? */ static Qt::CheckState parentCheckState( PackageTreeItem* parent ) { if ( parent ) { // Avoid partially-checked .. a package can't be partial return parent->isSelected() == Qt::Unchecked ? Qt::Unchecked : Qt::Checked; } else { return Qt::Unchecked; } } /** @brief Should a subgroup be marked critical? * * If set explicitly, then use that, otherwise use the parent's critical-ness. */ static bool parentCriticality( const QVariantMap& groupData, PackageTreeItem* parent ) { if ( groupData.contains( "critical" ) ) { return CalamaresUtils::getBool( groupData, "critical", false ); } return parent ? parent->isCritical() : false; } PackageTreeItem::PackageTreeItem( const QString& packageName, PackageTreeItem* parent ) : m_parentItem( parent ) , m_packageName( packageName ) , m_selected( parentCheckState( parent ) ) , m_isGroup( false ) , m_isCritical( parent ? parent->isCritical() : false ) , m_showReadOnly( parent ? parent->isImmutable() : false ) { } 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.parent ) ) , m_description( CalamaresUtils::getString( groupData, "description" ) ) , m_preScript( CalamaresUtils::getString( groupData, "pre-install" ) ) , m_postScript( CalamaresUtils::getString( groupData, "post-install" ) ) , m_isGroup( true ) , 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 ) ) { } PackageTreeItem::PackageTreeItem::PackageTreeItem() : m_parentItem( nullptr ) , m_name( QStringLiteral( "" ) ) , m_selected( Qt::Checked ) , m_isGroup( true ) { } PackageTreeItem::~PackageTreeItem() { qDeleteAll( m_childItems ); } void PackageTreeItem::appendChild( PackageTreeItem* child ) { m_childItems.append( child ); } PackageTreeItem* PackageTreeItem::child( int row ) { return m_childItems.value( row ); } int PackageTreeItem::childCount() const { return m_childItems.count(); } int PackageTreeItem::row() const { if ( m_parentItem ) { return m_parentItem->m_childItems.indexOf( const_cast< PackageTreeItem* >( this ) ); } return 0; } QVariant PackageTreeItem::data( int column ) const { switch ( column ) { 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(); } } PackageTreeItem* PackageTreeItem::parentItem() { return m_parentItem; } const PackageTreeItem* PackageTreeItem::parentItem() const { return m_parentItem; } bool PackageTreeItem::hiddenSelected() const { if ( !m_isHidden ) { return m_selected != Qt::Unchecked; } if ( m_selected == Qt::Unchecked ) { return false; } const PackageTreeItem* currentItem = parentItem(); while ( currentItem != nullptr ) { if ( !currentItem->isHidden() ) { return currentItem->isSelected() != Qt::Unchecked; } currentItem = currentItem->parentItem(); } /* Has no non-hidden parents */ return m_selected != Qt::Unchecked; } void PackageTreeItem::setSelected( Qt::CheckState isSelected ) { if ( parentItem() == nullptr ) { // This is the root, it is always checked so don't change state return; } m_selected = isSelected; setChildrenSelected( isSelected ); // Look for suitable parent item which may change checked-state // when one of its children changes. PackageTreeItem* currentItem = parentItem(); while ( ( currentItem != nullptr ) && ( currentItem->childCount() == 0 ) ) { currentItem = currentItem->parentItem(); } if ( currentItem == nullptr ) { // Reached the root .. don't bother return; } currentItem->updateSelected(); } void PackageTreeItem::updateSelected() { // Figure out checked-state based on the children int childrenSelected = 0; int childrenPartiallySelected = 0; for ( int i = 0; i < childCount(); i++ ) { if ( child( i )->isSelected() == Qt::Checked ) { childrenSelected++; } if ( child( i )->isSelected() == Qt::PartiallyChecked ) { childrenPartiallySelected++; } } if ( !childrenSelected && !childrenPartiallySelected ) { setSelected( Qt::Unchecked ); } else if ( childrenSelected == childCount() ) { setSelected( Qt::Checked ); } else { setSelected( Qt::PartiallyChecked ); } } void PackageTreeItem::setChildrenSelected( Qt::CheckState isSelected ) { if ( isSelected != Qt::PartiallyChecked ) // Children are never root; don't need to use setSelected on them. for ( auto child : m_childItems ) { child->m_selected = isSelected; child->setChildrenSelected( isSelected ); } } int PackageTreeItem::type() const { return QStandardItem::UserType; } QVariant PackageTreeItem::toOperation() const { // If it's a package with a pre- or post-script, replace // with the more complicated datastructure. if ( !m_preScript.isEmpty() || !m_postScript.isEmpty() ) { QMap< QString, QVariant > sdetails; sdetails.insert( "pre-script", m_preScript ); sdetails.insert( "package", m_packageName ); sdetails.insert( "post-script", m_postScript ); return sdetails; } else { return m_packageName; } } bool PackageTreeItem::operator==( const PackageTreeItem& rhs ) const { if ( isGroup() != rhs.isGroup() ) { // Different kinds return false; } if ( isGroup() ) { return name() == rhs.name() && description() == rhs.description() && preScript() == rhs.preScript() && postScript() == rhs.postScript() && isCritical() == rhs.isCritical() && isHidden() == rhs.isHidden() && m_showReadOnly == rhs.m_showReadOnly && expandOnStart() == rhs.expandOnStart(); } else { return packageName() == rhs.packageName(); } } calamares-3.2.41.1/src/modules/netinstall/PackageTreeItem.h000066400000000000000000000125431410275732300234600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017 Kyle Robbertze * SPDX-FileCopyrightText: 2017 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PACKAGETREEITEM_H #define PACKAGETREEITEM_H #include #include #include 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, GroupTag&& parent ); ///@brief A root item, always selected, named "" explicit PackageTreeItem(); ~PackageTreeItem() override; void appendChild( PackageTreeItem* child ); PackageTreeItem* child( int row ); int childCount() const; QVariant data( int column ) const override; int row() const; PackageTreeItem* parentItem(); const PackageTreeItem* parentItem() const; QString name() const { return m_name; } QString packageName() const { return m_packageName; } QString description() const { return m_description; } QString preScript() const { return m_preScript; } QString postScript() const { return m_postScript; } /** @brief Is this item a group-item? * * Groups have a (possibly empty) list of packages, and a * (possibly empty) list of sub-groups, and can be marked * critical, hidden, etc. Packages, on the other hand, only * have a meaningful packageName() and selection status. * * Root is a group. */ bool isGroup() const { return m_isGroup; } /// @brief Is this item a single package? bool isPackage() const { return !isGroup(); } /** @brief Is this item hidden? * * Hidden items (generally only groups) are maintained separately, * not shown to the user, but do enter into the package-installation process. */ bool isHidden() const { return m_isHidden; } /** @brief Is this hidden item, considered "selected"? * * This asserts when called on a non-hidden item. * A hidden item has its own selected state, but really * falls under the selectedness of the parent item. */ bool hiddenSelected() const; /** @brief Is this group critical? * * A critical group must be successfully installed, for the Calamares * installation to continue. */ bool isCritical() const { return m_isCritical; } /** @brief Is this group expanded on start? * * This does not affect installation, only the UI. A group * that expands on start is shown expanded (not collapsed) * in the treeview when the page is loaded. */ bool expandOnStart() const { return m_startExpanded; } /** @brief Is this an immutable item? * * Groups can be immutable: then you can't toggle the selected * state of any of its items. */ bool isImmutable() const { return m_showReadOnly; } /** @brief is this item selected? * * Groups may be partially selected; packages are only on or off. */ Qt::CheckState isSelected() const { return m_selected; } /** @brief Turns this item into a variant for PackageOperations use * * For "plain" items, this is just the package name; items with * scripts return a map. See the package module for how it's interpreted. */ QVariant toOperation() const; void setSelected( Qt::CheckState isSelected ); void setChildrenSelected( Qt::CheckState isSelected ); /** @brief Update selectedness based on the children's states * * This only makes sense for groups, which might have packages * or subgroups; it checks only direct children. */ void updateSelected(); // QStandardItem methods int type() const override; /** @brief Are two items equal * * This **disregards** parent-item and the child-items, and compares * only the fields for the items-proper (name, .. expanded). Note * also that *isSelected()* is a run-time state, and is **not** * compared either. */ bool operator==( const PackageTreeItem& rhs ) const; bool operator!=( const PackageTreeItem& rhs ) const { return !( *this == rhs ); } private: PackageTreeItem* m_parentItem; List m_childItems; // An entry can be a package, or a group. QString m_name; QString m_packageName; Qt::CheckState m_selected = Qt::Unchecked; // These are only useful for groups QString m_description; QString m_preScript; QString m_postScript; bool m_isGroup = false; bool m_isCritical = false; bool m_isHidden = false; bool m_showReadOnly = false; bool m_startExpanded = false; }; #endif // PACKAGETREEITEM_H calamares-3.2.41.1/src/modules/netinstall/Tests.cpp000066400000000000000000000310021410275732300221120ustar00rootroot00000000000000/* === 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 "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 { Q_OBJECT public: ItemTests(); ~ItemTests() override {} private: void checkAllSelected( PackageTreeItem* p ); void recursiveCompare( PackageTreeItem*, PackageTreeItem* ); void recursiveCompare( PackageModel&, PackageModel& ); 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() {} void ItemTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void ItemTests::testRoot() { PackageTreeItem r; QCOMPARE( r.isSelected(), Qt::Checked ); QCOMPARE( r.name(), QStringLiteral( "" ) ); QCOMPARE( r.parentItem(), nullptr ); QVERIFY( r.isGroup() ); QVERIFY( r == r ); } void ItemTests::testPackage() { PackageTreeItem p( "bash", nullptr ); 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() ); QVERIFY( !p.isCritical() ); QVERIFY( !p.isGroup() ); QVERIFY( p.isPackage() ); QVERIFY( p == p ); // This doesn't happen in normal constructions, // because a package can't have children. PackageTreeItem c( "zsh", &p ); QCOMPARE( c.isSelected(), Qt::Unchecked ); QCOMPARE( c.packageName(), QStringLiteral( "zsh" ) ); QVERIFY( c.name().isEmpty() ); // not a group QCOMPARE( c.parentItem(), &p ); QVERIFY( !c.isGroup() ); QVERIFY( c.isPackage() ); QVERIFY( c == c ); QVERIFY( c != p ); QCOMPARE( p.childCount(), 0 ); // not noticed it has a child } // *INDENT-OFF* // clang-format off static const char doc[] = "- name: \"CCR\"\n" " description: \"Tools for the Chakra Community Repository\"\n" " packages:\n" " - ccr\n" " - base-devel\n" " - bash\n"; static const char doc_no_packages[] = "- name: \"CCR\"\n" " description: \"Tools for the Chakra Community Repository\"\n" " packages: []\n"; static const char doc_with_expanded[] = "- name: \"CCR\"\n" " description: \"Tools for the Chakra Community Repository\"\n" " expanded: true\n" " packages:\n" " - ccr\n" " - base-devel\n" " - bash\n"; // *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() { YAML::Node yamldoc = YAML::Load( doc ); QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); QCOMPARE( yamlContents.length(), 1 ); PackageTreeItem p( yamlContents[ 0 ].toMap(), PackageTreeItem::GroupTag { nullptr } ); QCOMPARE( p.name(), QStringLiteral( "CCR" ) ); QVERIFY( p.packageName().isEmpty() ); QVERIFY( p.description().startsWith( QStringLiteral( "Tools " ) ) ); QCOMPARE( p.parentItem(), nullptr ); QVERIFY( !p.isHidden() ); QVERIFY( !p.isCritical() ); // The item-constructor doesn't consider the packages: list QCOMPARE( p.childCount(), 0 ); QVERIFY( p.isGroup() ); QVERIFY( !p.isPackage() ); QVERIFY( p == p ); PackageTreeItem c( "zsh", nullptr ); // Single string, package QVERIFY( p != c ); } void ItemTests::testCompare() { PackageTreeItem p0( "bash", nullptr ); PackageTreeItem p1( "bash", &p0 ); PackageTreeItem p2( "bash", nullptr ); QVERIFY( p0 == p1 ); // Parent doesn't matter QVERIFY( p0 == p2 ); p2.setSelected( Qt::Checked ); p1.setSelected( Qt::Unchecked ); QVERIFY( p0 == p1 ); // Neither does selected state QVERIFY( p0 == p2 ); PackageTreeItem r0( nullptr ); QVERIFY( p0 != r0 ); QVERIFY( p1 != r0 ); QVERIFY( r0 == r0 ); PackageTreeItem r1( nullptr ); QVERIFY( r0 == r1 ); // Different roots are still equal PackageTreeItem r2( "", nullptr ); // Fake root QVERIFY( r0 != r2 ); QVERIFY( r1 != r2 ); QVERIFY( p0 != r2 ); PackageTreeItem r3( "", nullptr ); QVERIFY( r3 == r2 ); YAML::Node yamldoc = YAML::Load( doc ); // See testGroup() QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); QCOMPARE( yamlContents.length(), 1 ); 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(), PackageTreeItem::GroupTag { nullptr } ); QVERIFY( p3 == p4 ); PackageTreeItem p5( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc_no_packages ) )[ 0 ].toMap(), PackageTreeItem::GroupTag { nullptr } ); QVERIFY( p3 == p5 ); } void ItemTests::checkAllSelected( PackageTreeItem* p ) { QVERIFY( p->isSelected() ); for ( int i = 0; i < p->childCount(); ++i ) { checkAllSelected( p->child( i ) ); } } void ItemTests::recursiveCompare( PackageTreeItem* l, PackageTreeItem* r ) { QVERIFY( l && r ); QVERIFY( *l == *r ); QCOMPARE( l->childCount(), r->childCount() ); for ( int i = 0; i < l->childCount(); ++i ) { QCOMPARE( l->childCount(), r->childCount() ); recursiveCompare( l->child( i ), r->child( i ) ); } } void ItemTests::recursiveCompare( PackageModel& l, PackageModel& r ) { return recursiveCompare( l.m_rootItem, r.m_rootItem ); } void ItemTests::testModel() { YAML::Node yamldoc = YAML::Load( doc ); // See testGroup() QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); QCOMPARE( yamlContents.length(), 1 ); PackageModel m0( nullptr ); m0.setupModelData( yamlContents ); QCOMPARE( m0.m_hiddenItems.count(), 0 ); // Nothing hidden QCOMPARE( m0.rowCount(), 1 ); // Group, the packages are invisible QCOMPARE( m0.rowCount( m0.index( 0, 0 ) ), 3 ); // The packages checkAllSelected( m0.m_rootItem ); PackageModel m2( nullptr ); m2.setupModelData( CalamaresUtils::yamlSequenceToVariant( YAML::Load( doc_with_expanded ) ) ); QCOMPARE( m2.m_hiddenItems.count(), 0 ); QCOMPARE( m2.rowCount(), 1 ); // Group, now the packages expanded but not counted QCOMPARE( m2.rowCount( m2.index( 0, 0 ) ), 3 ); // The packages checkAllSelected( m2.m_rootItem ); PackageTreeItem r; QVERIFY( r == *m0.m_rootItem ); QCOMPARE( m0.m_rootItem->childCount(), 1 ); PackageTreeItem* group = m0.m_rootItem->child( 0 ); QVERIFY( group->isGroup() ); QCOMPARE( group->name(), QStringLiteral( "CCR" ) ); QCOMPARE( group->childCount(), 3 ); PackageTreeItem bash( "bash", nullptr ); // Check that the sub-packages loaded correctly bool found_one_bash = false; for ( int i = 0; i < group->childCount(); ++i ) { QVERIFY( group->child( i )->isPackage() ); if ( bash == *( group->child( i ) ) ) { found_one_bash = true; } } QVERIFY( found_one_bash ); // But m2 has "expanded" set which the others do no QVERIFY( *( m2.m_rootItem->child( 0 ) ) != *group ); } void ItemTests::testExampleFiles() { QVERIFY( QStringLiteral( BUILD_AS_TEST ).endsWith( "/netinstall" ) ); QDir d( BUILD_AS_TEST ); for ( const QString& filename : QStringList { "netinstall.yaml" } ) { QFile f( d.filePath( filename ) ); QVERIFY( f.exists() ); QVERIFY( f.open( QIODevice::ReadOnly ) ); QByteArray contents = f.readAll(); QVERIFY( !contents.isEmpty() ); YAML::Node yamldoc = YAML::Load( contents.constData() ); QVariantList yamlContents = CalamaresUtils::yamlSequenceToVariant( yamldoc ); PackageModel m1( nullptr ); m1.setupModelData( yamlContents ); // TODO: should test *something* about this file :/ } } 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 ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/modules/netinstall/netinstall.conf000066400000000000000000000337641410275732300233510ustar00rootroot00000000000000# 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 # 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 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. # # 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 # false (the default). If set to true, the netinstall data is required. # # 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. # 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. # If no *sidebar* values are provided, defaults to "Package selection" # and existing translations. If no *title* values are provided, no string # is displayed. # # 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" # - "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. 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). # # 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 selected: true critical: false 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 selected: false critical: true subgroups: - name: "Bash" description: "Bourne Again Shell" selected: true packages: - bash - bash-completion - name: "Zsh" description: "Zee shell, boss" packages: - 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 selected: true critical: true immutable: true packages: - kernel - kernel-debugsym - kernel-nvidia # *selected* defaults to true for top-level - name: Communications description: "Communications Software" packages: - ruqola - 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 calamares-3.2.41.1/src/modules/netinstall/netinstall.schema.yaml000066400000000000000000000064371410275732300246220ustar00rootroot00000000000000# 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' } calamares-3.2.41.1/src/modules/netinstall/netinstall.yaml000066400000000000000000000116451410275732300233600ustar00rootroot00000000000000# Example configuration with groups and packages, taken from Chakra Linux. # # 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 selected: true critical: false packages: - base - chakra-live-skel - cdemu-client - lsb-release - avahi - grub # disk utils - dosfstools - e2fsprogs - fuse - gptfdisk - jfsutils - ntfs-3g - reiserfsprogs - xfsprogs # power - acpi_call - pmtools # network - dnsutils - iputils - netcfg - xinetd # firmwares - alsa-firmware - linux-firmware # sound - alsa-lib - alsa-utils - gstreamer - gst-plugins-good - gst-plugins-bad - libao - libcanberra-gstreamer - libcanberra-pulse - pulseaudio - pulseaudio-alsa # tools - bash-completion - hwinfo - lsof - man-db - mlocate - nano - openssh - sudo - vim - zsh # :D # archivers - p7zip - unarj - unrar - unzip - zip # xorg base - xorg - xorg-apps - xorg-fonts-alias - xorg-fonts-encodings - xorg-fonts-misc - xorg-res-utils - xorg-server - xorg-server-utils - xorg-xauth - xorg-xinit - xorg-xkb-utils # xorg video drivers - xf86-video-apm - xf86-video-ark - xf86-video-ati - xf86-video-chips - xf86-video-cirrus - xf86-video-glint - xf86-video-i128 - xf86-video-i740 - xf86-video-intel - xf86-video-mach64 - xf86-video-mga - xf86-video-neomagic - xf86-video-nouveau - xf86-video-nv - xf86-video-openchrome - xf86-video-r128 - xf86-video-rendition - xf86-video-s3 - xf86-video-s3virge - xf86-video-savage - xf86-video-siliconmotion - xf86-video-sisusb - xf86-video-tdfx - xf86-video-trident - xf86-video-tseng - xf86-video-v4l - xf86-video-vesa - xf86-video-voodoo - mesa-libgl # xorg input drivers - xf86-input-synaptics - xf86-input-wacom - xf86-input-evdev - xf86-input-keyboard - xf86-input-mouse # fonts - terminus-font - ttf-dejavu - ttf-liberation - wqy-microhei - xorg-fonts-100dpi - xorg-fonts-75dpi - xorg-fonts-cyrillic # additional stuff that needs xorg - hicolor-icon-theme # kde - chakra-common - qt - kde-baseapps - kde-baseapps-dolphin - kde-baseapps-konsole - kde-runtime - kde-workspace - kdelibs - kdepimlibs - kdemultimedia-kmix - oxygen-icons - phonon-backend-gstreamer # chakra theme (including kapudan options) - chakra-wallpapers-dharma - chakra-wallpapers-curie - chakra-wallpapers-descartes - grub2-themes-sirius - kapudan-kde-themes-caledonia - kde-kdm-themes-sirius - kde-ksplash-themes-sirius - kde-plasma-themes-caledonia - python2-imaging - python2-v4l2capture - python2-xlib - caledonia-colors - yakuake-themes-ronak # kde (everything else) - kdeadmin-kcron - kdeadmin-kuser - kdeplasma-addons-applets-icontasks - kdesdk-kate - kdeutils-ark - kdeutils-kgpg - kdeutils-sweeper # kde network - kdeplasma-applets-plasma-nm - networkmanager-dispatcher-ntpd - kcm-ufw # applications - rekonq - yakuake # enable systemd-units - chakra-init-live # overlay pkgs - partitionmanager - octopi-notifier - kapudan - name: "Wireless" description: "Tools for wireless connections" critical: false packages: - crda - ndiswrapper - usb-modeswitch - wireless-regdb - wireless_tools - wpa_supplicant - name: "CCR" description: "Tools for the Chakra Community Repository" packages: - ccr - base-devel - name: "Graphics" description: "Applications to work with graphics" packages: - kdegraphics-gwenview - kdegraphics-kamera - kdegraphics-kcolorchooser - kdegraphics-kgamma - kdegraphics-kolourpaint - kdegraphics-kruler - kdegraphics-ksaneplugin - kdegraphics-ksnapshot - kdegraphics-libkdcraw - kdegraphics-libkexiv2 - kdegraphics-libkipi - kdegraphics-libksane - kdegraphics-mobipocket - kdegraphics-okular - kdegraphics-strigi-analyzer - kdegraphics-svgpart - kdegraphics-thumbnailers - imagemagick calamares-3.2.41.1/src/modules/netinstall/page_netinst.ui000066400000000000000000000030731410275732300233320ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2016 shainer <syn.shainer@gmail.com> SPDX-License-Identifier: GPL-3.0-or-later Page_NetInst 0 0 997 474 Qt::AlignCenter 16777215 16777215 true 0 0 981 407 11 calamares-3.2.41.1/src/modules/netinstall/tests/000077500000000000000000000000001410275732300214525ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/netinstall/tests/1a-single-bad.conf000066400000000000000000000001771410275732300246320ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/bad.yaml calamares-3.2.41.1/src/modules/netinstall/tests/1a-single-empty.conf000066400000000000000000000002061410275732300252330ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-empty.yaml calamares-3.2.41.1/src/modules/netinstall/tests/1a-single-error.conf000066400000000000000000000002061410275732300252260ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-error.yaml calamares-3.2.41.1/src/modules/netinstall/tests/1b-single-large.conf000066400000000000000000000002061410275732300251700ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-large.yaml calamares-3.2.41.1/src/modules/netinstall/tests/1b-single-small.conf000066400000000000000000000002061410275732300252060ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: - file://$TESTDIR/data-small.yaml calamares-3.2.41.1/src/modules/netinstall/tests/1c-none.conf000066400000000000000000000001431410275732300235570ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true groupsUrl: [] calamares-3.2.41.1/src/modules/netinstall/tests/1c-unset.conf000066400000000000000000000001251410275732300237560ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- required: true calamares-3.2.41.1/src/modules/netinstall/tests/1d-fallback-bad.conf000066400000000000000000000003741410275732300251120ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/tests/1d-fallback-large.conf000066400000000000000000000003741410275732300254560ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/tests/1d-fallback-mixed.conf000066400000000000000000000005541410275732300254720ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/tests/1d-fallback-small.conf000066400000000000000000000003741410275732300254740ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/tests/data-empty.yaml000066400000000000000000000001231410275732300243770ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- bogus: true calamares-3.2.41.1/src/modules/netinstall/tests/data-error.yaml000066400000000000000000000001741410275732300244000ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # derp derp herpa-derp: no -- # This file is not valid YAML calamares-3.2.41.1/src/modules/netinstall/tests/data-large.yaml000066400000000000000000000012651410275732300243430ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/netinstall/tests/data-small.yaml000066400000000000000000000005021410275732300243520ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/networkcfg/000077500000000000000000000000001410275732300203045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/networkcfg/main.py000066400000000000000000000057451410275732300216150ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 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 os import shutil import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Saving network configuration.") def run(): """ Setup network configuration """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") 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/" ) # Sanity checks. We don't want to do anything if a network # configuration already exists on the target if os.path.exists(source_nm) and os.path.exists(target_nm): for network in os.listdir(source_nm): # Skip LTSP live if network == "LTSP": continue source_network = os.path.join(source_nm, network) target_network = os.path.join(target_nm, network) if os.path.exists(target_network): continue try: shutil.copy(source_network, target_network, follow_symlinks=False) except FileNotFoundError: libcalamares.utils.debug( "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") if source_resolv != target_resolv and os.path.exists(source_resolv): try: os.remove(target_resolv) except Exception as err: libcalamares.utils.debug( "Couldn't remove {}: {}".format(target_resolv, err) ) try: 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) ) return None calamares-3.2.41.1/src/modules/networkcfg/module.desc000066400000000000000000000002531410275732300224310ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "networkcfg" interface: "python" script: "main.py" noconfig: true calamares-3.2.41.1/src/modules/notesqml/000077500000000000000000000000001410275732300177755ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/notesqml/CMakeLists.txt000066400000000000000000000007351410275732300225420ustar00rootroot00000000000000# === 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 SOURCES NotesQmlViewStep.cpp RESOURCES notesqml.qrc SHARED_LIB ) calamares-3.2.41.1/src/modules/notesqml/NotesQmlViewStep.cpp000066400000000000000000000021351410275732300237330ustar00rootroot00000000000000/* === 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 * */ #include "NotesQmlViewStep.h" #include NotesQmlViewStep::NotesQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) { } NotesQmlViewStep::~NotesQmlViewStep() {} QString NotesQmlViewStep::prettyName() const { return m_notesName ? m_notesName->get() : tr( "Notes" ); } void NotesQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { bool qmlLabel_ok = false; auto qmlLabel = CalamaresUtils::getSubMap( configurationMap, "qmlLabel", qmlLabel_ok ); if ( qmlLabel.contains( "notes" ) ) { m_notesName = new CalamaresUtils::Locale::TranslatedString( qmlLabel, "notes" ); } Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last } CALAMARES_PLUGIN_FACTORY_DEFINITION( NotesQmlViewStepFactory, registerPlugin< NotesQmlViewStep >(); ) calamares-3.2.41.1/src/modules/notesqml/NotesQmlViewStep.h000066400000000000000000000017411410275732300234020ustar00rootroot00000000000000/* === 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 * */ #ifndef NOTESQMLVIEWSTEP_H #define NOTESQMLVIEWSTEP_H #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/PluginFactory.h" #include "utils/Variant.h" #include "viewpages/QmlViewStep.h" class PLUGINDLLEXPORT NotesQmlViewStep : public Calamares::QmlViewStep { Q_OBJECT public: NotesQmlViewStep( QObject* parent = nullptr ); ~NotesQmlViewStep() override; QString prettyName() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: CalamaresUtils::Locale::TranslatedString* m_notesName; // As it appears in the sidebar }; CALAMARES_PLUGIN_FACTORY_DECLARATION( NotesQmlViewStepFactory ) #endif calamares-3.2.41.1/src/modules/notesqml/examples/000077500000000000000000000000001410275732300216135ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/notesqml/examples/notesqml.qml.example000066400000000000000000000043161410275732300256260ustar00rootroot00000000000000/* === 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 * */ /* Some Calamares internals are available to all QML modules. * They live in the calamares.ui namespace (filled programmatically * by Calamares). One of the internals that is exposed is the * Branding object, which can be used to retrieve strings and paths * and colors. */ 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 Item { width: 740 height : 420 Flickable { id: flick anchors .fill : parent contentHeight : 800 ScrollBar.vertical : ScrollBar { id : fscrollbar width : 10 policy : ScrollBar.AlwaysOn } TextArea { id: intro x: 1 y: 0 width: parent.width - fscrollbar.width 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)) } } } calamares-3.2.41.1/src/modules/notesqml/notesqml.conf000066400000000000000000000032001410275732300225010ustar00rootroot00000000000000# 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 # can put SameGame in there as well. # # While the module compiles a QML file into a QRC for inclusion # into the shared library, normal use will configure it with # an external file, either from Calamares AppData directory or # from the branding directory. # # --- # # QML modules can search for the QML inside the Qt resources # (QRC) which are compiled into the module, or in the branding # setup for Calamares, (or both of them, with branding taking # precedence). This allows the module to ship a default UI and # branding to optionally introduce a replacement file. # # Generally, leave the search method set to "both" because if # you don't want to brand the UI, just don't ship a branding # QML file for it. # # To support instanced QML modules, searches in the branding # directory look for the full notesqml@instanceid name as well. --- # Search mode. Valid values are "both", "qrc" and "branding" qmlSearch: both # Name of the QML file. If not set, uses the name of the instance # of the module (e.g. if you list this module in `settings.conf` # in the *instances* section, you get *id*, otherwise it would # normally be "notesqml"). # qmlFilename: notesqml # This is the name of the module in the progress-tree / sidebar # in Calamares. To support multiple instances of the QML module, # the name is configurable and translatable here. qmlLabel: notes: "Release Notes" notes[nl]: "Opmerkingen" calamares-3.2.41.1/src/modules/notesqml/notesqml.qml000066400000000000000000000027371410275732300223630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * Copyright 2020, Anke Boersma * Copyright 2020, Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ /* Some Calamares internals are available to all QML modules. * They live in the io.calamares namespace (filled programmatically * by Calamares). One of the internals that is exposed in the sub- * namespace io.calamares.ui is the Branding object, which can be used * to retrieve strings and paths and colors. For a full list, see * the documentation in `Qml.h`. */ 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 import QtQuick.Controls.Material 2.1 Item { width: 740 height: 420 Flickable { id: flick anchors.fill: parent contentHeight: 800 ScrollBar.vertical: ScrollBar { id: fscrollbar width: 10 policy: ScrollBar.AlwaysOn } TextArea { id: intro x: 1 y: 0 width: parent.width - fscrollbar.width font.pointSize: 14 textFormat: Text.RichText antialiasing: true activeFocusOnPress: false wrapMode: Text.WordWrap text: qsTr("

%1

These are example release notes.

" ).arg(Branding.string(Branding.VersionedName)) } } } calamares-3.2.41.1/src/modules/notesqml/notesqml.qrc000066400000000000000000000001631410275732300223460ustar00rootroot00000000000000 notesqml.qml calamares-3.2.41.1/src/modules/oemid/000077500000000000000000000000001410275732300172305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/oemid/CMakeLists.txt000066400000000000000000000006301410275732300217670ustar00rootroot00000000000000# === 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 SOURCES IDJob.cpp OEMViewStep.cpp UI OEMPage.ui LINK_PRIVATE_LIBRARIES Qt5::Widgets SHARED_LIB ) calamares-3.2.41.1/src/modules/oemid/IDJob.cpp000066400000000000000000000056521410275732300206730ustar00rootroot00000000000000/* === 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 "IDJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/Logger.h" #include #include IDJob::IDJob( const QString& id, QObject* parent ) : Job( parent ) , m_batchIdentifier( id ) { } QString IDJob::prettyName() const { return tr( "OEM Batch Identifier" ); } 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 ) ); } 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() ) ); } 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() ) ); } output.write( "\n" ); // Ignore error on this one return Calamares::JobResult::ok(); } Calamares::JobResult IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QString targetDir = QStringLiteral( "/var/log/installer/" ); QString targetFile = QStringLiteral( "oem-id" ); QString rootMount = gs->value( "rootMountPoint" ).toString(); // 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 ); } calamares-3.2.41.1/src/modules/oemid/IDJob.h000066400000000000000000000012721410275732300203320ustar00rootroot00000000000000/* === 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 IDJOB_H #define IDJOB_H #include "Job.h" #include class IDJob : public Calamares::Job { Q_OBJECT public: explicit IDJob( const QString& id, QObject* parent = nullptr ); virtual QString prettyName() const override; virtual Calamares::JobResult exec() override; private: Calamares::JobResult writeId( const QString&, const QString&, const QString& ); QString m_batchIdentifier; }; #endif calamares-3.2.41.1/src/modules/oemid/OEMPage.ui000066400000000000000000000057501410275732300210130ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> SPDX-License-Identifier: GPL-3.0-or-later OEMPage 0 0 592 300 1 0 OEMPage Ba&tch: batchIdentifier <html><head/><body><p>Enter a batch-identifier here. This will be stored in the target system.</p></body></html> batch-identifier <html><head/><body><h1>OEM Configuration</h1><p>Calamares will use OEM settings while configuring the target system.</p></body></html> Qt::RichText Qt::AlignCenter true Qt::Vertical QSizePolicy::Fixed 20 40 Qt::Vertical 20 40 calamares-3.2.41.1/src/modules/oemid/OEMViewStep.cpp000066400000000000000000000052741410275732300220530ustar00rootroot00000000000000/* === 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 "OEMViewStep.h" #include "ui_OEMPage.h" #include "IDJob.h" #include "utils/Retranslator.h" #include "utils/Variant.h" #include #include #include class OEMPage : public QWidget { public: OEMPage() : QWidget( nullptr ) , m_ui( new Ui_OEMPage() ) { m_ui->setupUi( this ); CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ); } ~OEMPage() override; Ui_OEMPage* m_ui; }; OEMPage::~OEMPage() {} OEMViewStep::OEMViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_visited( false ) { } OEMViewStep::~OEMViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } bool OEMViewStep::isBackEnabled() const { return true; } bool OEMViewStep::isNextEnabled() const { return true; } bool OEMViewStep::isAtBeginning() const { return true; } bool OEMViewStep::isAtEnd() const { return true; } 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 ) ); } return s; } void OEMViewStep::onActivate() { if ( !m_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() { m_user_batchIdentifier = m_widget->m_ui->batchIdentifier->text(); ViewStep::onLeave(); } QString OEMViewStep::prettyName() const { return tr( "OEM Configuration" ); } QString OEMViewStep::prettyStatus() const { return tr( "Set the OEM Batch Identifier to %1." ).arg( m_user_batchIdentifier ); } QWidget* OEMViewStep::widget() { if ( !m_widget ) { m_widget = new OEMPage; } return m_widget; } Calamares::JobList OEMViewStep::jobs() const { return Calamares::JobList() << Calamares::job_ptr( new IDJob( m_user_batchIdentifier ) ); } 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< OEMViewStep >(); ) calamares-3.2.41.1/src/modules/oemid/OEMViewStep.h000066400000000000000000000023651410275732300215160ustar00rootroot00000000000000/* === 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 OEMVIEWSTEP_H #define OEMVIEWSTEP_H #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" #include class OEMPage; class PLUGINDLLEXPORT OEMViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit OEMViewStep( QObject* parent = nullptr ); ~OEMViewStep() override; QString prettyName() const override; QString prettyStatus() const override; QWidget* widget() 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; private: QString m_conf_batchIdentifier; QString m_user_batchIdentifier; OEMPage* m_widget; bool m_visited; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( OEMViewStepFactory ) #endif calamares-3.2.41.1/src/modules/oemid/oemid.conf000066400000000000000000000012011410275732300211660ustar00rootroot00000000000000# 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. # This value is put into the text box as the **suggested** # OEM ID. If @@DATE@@ is included in the identifier, then # that is replaced by the current date in yyyy-MM-dd (ISO) format. # # it is ok for the identifier to be empty. # # The identifier is written to the file as UTF-8 (this will be no # different from ASCII, for most inputs) and followed by a newline. # If the identifier is empty, only a newline is written. batch-identifier: neon-@@DATE@@ calamares-3.2.41.1/src/modules/openrcdmcryptcfg/000077500000000000000000000000001410275732300215045ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/openrcdmcryptcfg/main.py000066400000000000000000000063401410275732300230050ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2017 Ghiunhan Mamut # SPDX-FileCopyrightText: 2019 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is Free Software: see the License-Identifier above. # import os.path import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configuring OpenRC dmcrypt service.") 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 skip_partitions = partition["mountPoint"] == "/" or partition["fs"] == "linuxswap" 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"]) libcalamares.utils.debug( "Writing OpenRC LUKS configuration for partition {!s}".format(partition["mountPoint"])) 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) # 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: pass # root and swap partitions should be handled by initramfs generators return None def run(): """ This module configures OpenRC dmcrypt service for LUKS encrypted partitions. :return: """ root_mount_point = libcalamares.globalstorage.value("rootMountPoint") dmcrypt_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("openrcdmcryptcfg")) 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("openrcdmcryptcfg")) dmcrypt_conf_path = dmcrypt_conf_path.lstrip('/') return write_dmcrypt_conf(partitions, root_mount_point, dmcrypt_conf_path) calamares-3.2.41.1/src/modules/openrcdmcryptcfg/module.desc000066400000000000000000000002401410275732300236250ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "openrcdmcryptcfg" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/openrcdmcryptcfg/openrcdmcryptcfg.conf000066400000000000000000000001521410275732300257220ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- configFilePath: /etc/conf.d/dmcrypt calamares-3.2.41.1/src/modules/packagechooser/000077500000000000000000000000001410275732300211115ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/packagechooser/CMakeLists.txt000066400000000000000000000036211410275732300236530ustar00rootroot00000000000000# === 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 "" ) ### 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 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 ItemAppStream.cpp ) endif() endif() calamares_add_plugin( packagechooser TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Config.cpp PackageChooserPage.cpp PackageChooserViewStep.cpp PackageModel.cpp ${_extra_src} RESOURCES packagechooser.qrc UI page_package.ui LINK_PRIVATE_LIBRARIES ${_extra_libraries} SHARED_LIB ) calamares_add_test( packagechoosertest GUI SOURCES Tests.cpp LIBRARIES calamares_viewmodule_packagechooser ${_extra_libraries} ) calamares-3.2.41.1/src/modules/packagechooser/Config.cpp000066400000000000000000000161761410275732300230350ustar00rootroot00000000000000/* === 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" #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" 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 }, }; 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; } void Config::updateGlobalStorage( const QStringList& selected ) const { if ( m_method == PackageChooserMethod::Legacy ) { QString value = selected.join( ',' ); Calamares::JobQueue::instance()->globalStorage()->insert( m_id, value ); cDebug() << m_id<< "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 { cWarning() << "Unknown packagechooser method" << smash( m_method ); } } 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 ) { const QString configId = CalamaresUtils::getString( configurationMap, "id" ); const QString base = QStringLiteral( "packagechooser_" ); if ( configId.isEmpty() ) { if ( m_defaultId.id().isEmpty() ) { // We got nothing to work with m_id = base; } else { m_id = base + m_defaultId.id(); } cDebug() << "Using default ID" << m_id << "from" << m_defaultId.toString(); } else { m_id = base + configId; cDebug() << "Using configured ID" << m_id; } } 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; } } } } calamares-3.2.41.1/src/modules/packagechooser/Config.h000066400000000000000000000056041410275732300224740ustar00rootroot00000000000000/* === 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 PACKAGECHOOSER_CONFIG_H #define PACKAGECHOOSER_CONFIG_H #include "PackageModel.h" #include "modulesystem/Config.h" #include "modulesystem/InstanceKey.h" #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 }; const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames(); class Config : public Calamares::ModuleSystem::Config { Q_OBJECT 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; /// As updateGlobalStorage() with an empty selection list void fillGSSecondaryConfiguration() const { updateGlobalStorage( QStringList() ); } 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; /// Id (used to identify settings from this module in GS) QString m_id; /// Value to use for id if none is set in the config file Calamares::ModuleSystem::InstanceKey m_defaultId; }; #endif calamares-3.2.41.1/src/modules/packagechooser/ItemAppData.cpp000066400000000000000000000141351410275732300237520ustar00rootroot00000000000000/* === 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. * */ /** @brief Loading items from AppData XML files. * * Only used if QtXML is found, implements PackageItem::fromAppData(). */ #include "PackageModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include /** @brief try to load the given @p fileName XML document * * Returns a QDomDocument, which will be valid iff the file can * be read and contains valid XML data. */ static inline QDomDocument loadAppData( const QString& fileName ) { QFile file( fileName ); if ( !file.open( QIODevice::ReadOnly ) ) { return QDomDocument(); } QDomDocument doc( "AppData" ); if ( !doc.setContent( &file ) ) { file.close(); return QDomDocument(); } file.close(); return doc; } /** @brief gets the text of child element @p tagName */ static inline QString getChildText( const QDomNode& n, const QString& tagName ) { QDomElement e = n.firstChildElement( tagName ); return e.isNull() ? QString() : e.text(); } /** @brief Gets a suitable screenshot path * * The element contains zero or more * elements, which can have a *type* associated with them. * Scan the screenshot elements, return the path * for the one labeled with type=default or, if there is no * default, the first element. */ static inline QString getScreenshotPath( const QDomNode& n ) { QDomElement shotsNode = n.firstChildElement( "screenshots" ); if ( shotsNode.isNull() ) { return QString(); } const QDomNodeList shotList = shotsNode.childNodes(); int firstScreenshot = -1; // Use which screenshot node? for ( int i = 0; i < shotList.count(); ++i ) { if ( !shotList.at( i ).isElement() ) { continue; } QDomElement e = shotList.at( i ).toElement(); if ( e.tagName() != "screenshot" ) { continue; } // If none has the "type=default" attribute, use the first one if ( firstScreenshot < 0 ) { firstScreenshot = i; } // But type=default takes precedence. if ( e.hasAttribute( "type" ) && e.attribute( "type" ) == "default" ) { firstScreenshot = i; break; } } if ( firstScreenshot >= 0 ) { return shotList.at( firstScreenshot ).firstChildElement( "image" ).text(); } return QString(); } /** @brief Returns language of the given element @p e * * Transforms the attribute value for xml:lang to something * suitable for TranslatedString (e.g. [lang]). */ static inline QString getLanguage( const QDomElement& e ) { QString language = e.attribute( "xml:lang" ); if ( !language.isEmpty() ) { language.replace( '-', '_' ); language.prepend( '[' ); language.append( ']' ); } return language; } /** @brief Scan the list of @p children for @p tagname elements and add them to the map * * Uses @p mapname instead of @p tagname for the entries in map @p m * to allow renaming from XML to map keys (in particular for * TranslatedString). Also transforms xml:lang attributes to suitable * key-decorations on @p mapname. */ static inline void fillMap( QVariantMap& m, const QDomNodeList& children, const QString& tagname, const QString& mapname ) { for ( int i = 0; i < children.count(); ++i ) { if ( !children.at( i ).isElement() ) { continue; } QDomElement e = children.at( i ).toElement(); if ( e.tagName() != tagname ) { continue; } m[ mapname + getLanguage( e ) ] = e.text(); } } /** @brief gets the and elements * * Builds up a map of the elements (which may have a *lang* * attribute to indicate translations and paragraphs of the * element (also with lang). Uses the * elements to supplement the description if no description * is available for a given language. * * Returns a map with keys suitable for use by TranslatedString. */ static inline QVariantMap getNameAndSummary( const QDomNode& n ) { QVariantMap m; const QDomNodeList children = n.childNodes(); fillMap( m, children, "name", "name" ); fillMap( m, children, "summary", "description" ); const QDomElement description = n.firstChildElement( "description" ); if ( !description.isNull() ) { fillMap( m, description.childNodes(), "p", "description" ); } return m; } PackageItem fromAppData( const QVariantMap& item_map ) { QString fileName = CalamaresUtils::getString( item_map, "appdata" ); if ( fileName.isEmpty() ) { cWarning() << "Can't load AppData without a suitable key."; return PackageItem(); } cDebug() << "Loading AppData XML from" << fileName; QDomDocument doc = loadAppData( fileName ); if ( doc.isNull() ) { return PackageItem(); } QDomElement componentNode = doc.documentElement(); if ( !componentNode.isNull() && componentNode.tagName() == "component" ) { // An "id" entry in the Calamares config overrides ID in the AppData QString id = CalamaresUtils::getString( item_map, "id" ); if ( id.isEmpty() ) { id = getChildText( componentNode, "id" ); } if ( id.isEmpty() ) { return PackageItem(); } // A "screenshot" entry in the Calamares config overrides AppData QString screenshotPath = CalamaresUtils::getString( item_map, "screenshot" ); if ( screenshotPath.isEmpty() ) { screenshotPath = getScreenshotPath( componentNode ); } QVariantMap map = getNameAndSummary( componentNode ); map.insert( "id", id ); map.insert( "screenshot", screenshotPath ); return PackageItem( map ); } return PackageItem(); } calamares-3.2.41.1/src/modules/packagechooser/ItemAppData.h000066400000000000000000000015631410275732300234200ustar00rootroot00000000000000/* === 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 ITEMAPPDATA_H #define ITEMAPPDATA_H #include "PackageModel.h" /** @brief Loads an AppData XML file and returns a PackageItem * * The @p map must have a key *appdata*. That is used as the * primary source of information, but keys *id* and *screenshotPath* * may be used to override parts of the AppData -- so that the * ID is under the control of Calamares, and the screenshot can be * forced to a local path available on the installation medium. * * Requires XML support in libcalamares, if not present will * return invalid PackageItems. */ PackageItem fromAppData( const QVariantMap& map ); #endif calamares-3.2.41.1/src/modules/packagechooser/ItemAppStream.cpp000066400000000000000000000102611410275732300243300ustar00rootroot00000000000000/* === 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. * */ /** @brief Loading items from AppData XML files. * * Only used if QtXML is found, implements PackageItem::fromAppData(). */ #include "PackageModel.h" #include "locale/LabelModel.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include /// @brief Return number of pixels in a size, for < ordering purposes static inline quint64 sizeOrder( const QSize& size ) { return size.width() * size.height(); } /// @brief Sets a screenshot in @p map from @p screenshot, if a usable one is found static void setScreenshot( QVariantMap& map, const AppStream::Screenshot& screenshot ) { if ( screenshot.images().count() < 1 ) { return; } // Pick the smallest QUrl url; quint64 size = sizeOrder( screenshot.images().first().size() ); for ( const auto& img : screenshot.images() ) { if ( sizeOrder( img.size() ) <= size ) { url = img.url(); } } if ( url.isValid() ) { map.insert( "screenshot", url.toString() ); } } /// @brief Interpret an AppStream Component static PackageItem fromComponent( AppStream::Component& component ) { QVariantMap map; map.insert( "id", component.id() ); map.insert( "package", component.packageNames().join( "," ) ); // Assume that the pool has loaded "ALL" locales, but it might be set // to any of them; get the en_US locale as "untranslated" and then // loop over Calamares locales (since there is no way to query for // available locales in the Component) to see if there's anything else. component.setActiveLocale( QStringLiteral( "en_US" ) ); QString en_name = component.name(); QString en_description = component.description(); map.insert( "name", en_name ); map.insert( "description", en_description ); for ( const QString& locale : CalamaresUtils::Locale::availableTranslations()->localeIds() ) { component.setActiveLocale( locale ); QString name = component.name(); if ( name != en_name ) { map.insert( QStringLiteral( "name[%1]" ).arg( locale ), name ); } QString description = component.description(); if ( description != en_description ) { map.insert( QStringLiteral( "description[%1]" ).arg( locale ), description ); } } auto screenshots = component.screenshots(); if ( screenshots.count() > 0 ) { bool done = false; for ( const auto& s : screenshots ) { if ( s.isDefault() ) { setScreenshot( map, s ); done = true; break; } } if ( !done ) { setScreenshot( map, screenshots.first() ); } } return PackageItem( map ); } PackageItem fromAppStream( AppStream::Pool& pool, const QVariantMap& item_map ) { QString appstreamId = CalamaresUtils::getString( item_map, "appstream" ); if ( appstreamId.isEmpty() ) { cWarning() << "Can't load AppStream without a suitable appstreamId."; return PackageItem(); } cDebug() << "Loading AppStream data for" << appstreamId; auto itemList = pool.componentsById( appstreamId ); if ( itemList.count() < 1 ) { cWarning() << "No AppStream data for" << appstreamId; return PackageItem(); } if ( itemList.count() > 1 ) { cDebug() << "Multiple AppStream data for" << appstreamId << "using first."; } auto r = fromComponent( itemList.first() ); if ( r.isValid() ) { QString id = CalamaresUtils::getString( item_map, "id" ); QString screenshotPath = CalamaresUtils::getString( item_map, "screenshot" ); if ( !id.isEmpty() ) { r.id = id; } if ( !screenshotPath.isEmpty() ) { r.screenshot = screenshotPath; } } return r; } calamares-3.2.41.1/src/modules/packagechooser/ItemAppStream.h000066400000000000000000000016711410275732300240020ustar00rootroot00000000000000/* === 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 ITEMAPPSTREAM_H #define ITEMAPPSTREAM_H #include "PackageModel.h" namespace AppStream { class Pool; } /** @brief Loads an item from AppStream data. * * The @p map must have a key *appstream*. That is used as the * primary source of information from the AppStream cache, but * keys *id* and *screenshotPath* may be used to override parts * of the AppStream data -- so that the ID is under the control * of Calamares, and the screenshot can be forced to a local path * available on the installation medium. * * Requires AppStreamQt, if not present will return invalid * PackageItems. */ PackageItem fromAppStream( AppStream::Pool& pool, const QVariantMap& map ); #endif calamares-3.2.41.1/src/modules/packagechooser/PackageChooserPage.cpp000066400000000000000000000124371410275732300252770ustar00rootroot00000000000000/* === 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 "PackageChooserPage.h" #include "ui_page_package.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent ) : QWidget( parent ) , ui( new Ui::PackageChooserPage ) , m_introduction( QString(), QString(), tr( "Package Selection" ), tr( "Please pick a product from the list. The selected product will be installed." ) ) { m_introduction.screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ); switch ( mode ) { case PackageChooserMode::Optional: [[fallthrough]]; case PackageChooserMode::Required: ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); break; case PackageChooserMode::OptionalMultiple: [[fallthrough]]; case PackageChooserMode::RequiredMultiple: ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); } 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 ) { if ( !index.isValid() || !ui->products->selectionModel()->hasSelection() ) { ui->productName->setText( m_introduction.name.get() ); ui->productScreenshot->setPixmap( m_introduction.screenshot ); ui->productDescription->setText( m_introduction.description.get() ); } else { const auto* model = ui->products->model(); ui->productName->setText( model->data( index, PackageListModel::NameRole ).toString() ); ui->productDescription->setText( model->data( index, PackageListModel::DescriptionRole ).toString() ); QPixmap currentScreenshot = model->data( index, PackageListModel::ScreenshotRole ).value< QPixmap >(); if ( currentScreenshot.isNull() ) { ui->productScreenshot->setPixmap( m_introduction.screenshot ); } else { ui->productScreenshot->setPixmap( smartClip( currentScreenshot, ui->productScreenshot->size() ) ); } } } void PackageChooserPage::updateLabels() { if ( ui && ui->products && ui->products->selectionModel() ) { currentChanged( ui->products->selectionModel()->currentIndex() ); } else { currentChanged( QModelIndex() ); } emit selectionChanged(); } void PackageChooserPage::setModel( QAbstractItemModel* model ) { ui->products->setModel( model ); currentChanged( QModelIndex() ); connect( ui->products->selectionModel(), &QItemSelectionModel::selectionChanged, this, &PackageChooserPage::updateLabels ); } void PackageChooserPage::setSelection( const QModelIndex& index ) { if ( index.isValid() ) { ui->products->selectionModel()->select( index, QItemSelectionModel::Select ); currentChanged( index ); } } bool PackageChooserPage::hasSelection() const { return ui && ui->products && ui->products->selectionModel() && ui->products->selectionModel()->hasSelection(); } QStringList PackageChooserPage::selectedPackageIds() const { if ( !( ui && ui->products && ui->products->selectionModel() ) ) { return QStringList(); } const auto* model = ui->products->model(); QStringList ids; for ( const auto& index : ui->products->selectionModel()->selectedIndexes() ) { QString pid = model->data( index, PackageListModel::IdRole ).toString(); if ( !pid.isEmpty() ) { ids.append( pid ); } } return ids; } void PackageChooserPage::setIntroduction( const PackageItem& item ) { m_introduction.name = item.name; m_introduction.description = item.description; m_introduction.screenshot = item.screenshot; } calamares-3.2.41.1/src/modules/packagechooser/PackageChooserPage.h000066400000000000000000000025561410275732300247450ustar00rootroot00000000000000/* === 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 PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H #include "Config.h" #include "PackageModel.h" #include #include namespace Ui { class PackageChooserPage; } class PackageChooserPage : public QWidget { Q_OBJECT public: explicit PackageChooserPage( PackageChooserMode mode, QWidget* parent = nullptr ); /// @brief Sets the data model for the listview void setModel( QAbstractItemModel* model ); /// @brief Sets the introductory (no-package-selected) texts void setIntroduction( const PackageItem& item ); /// @brief Selects a listview item void setSelection( const QModelIndex& index ); /// @brief Is anything selected? bool hasSelection() const; /** @brief Get the list of selected ids * * This list may be empty (if none is selected). */ QStringList selectedPackageIds() const; public slots: void currentChanged( const QModelIndex& index ); void updateLabels(); signals: void selectionChanged(); private: Ui::PackageChooserPage* ui; PackageItem m_introduction; }; #endif // PACKAGECHOOSERPAGE_H calamares-3.2.41.1/src/modules/packagechooser/PackageChooserViewStep.cpp000066400000000000000000000070261410275732300261670ustar00rootroot00000000000000/* === 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 "PackageChooserViewStep.h" #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" #include "utils/Variant.h" #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlugin< PackageChooserViewStep >(); ) PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( nullptr ) , m_stepName( nullptr ) { emit nextStatusChanged( false ); } PackageChooserViewStep::~PackageChooserViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } delete m_stepName; } QString PackageChooserViewStep::prettyName() const { return m_stepName ? m_stepName->get() : tr( "Packages" ); } QWidget* PackageChooserViewStep::widget() { if ( !m_widget ) { m_widget = new PackageChooserPage( m_config->mode(), nullptr ); connect( m_widget, &PackageChooserPage::selectionChanged, [=]() { emit nextStatusChanged( this->isNextEnabled() ); } ); hookupModel(); } return m_widget; } bool PackageChooserViewStep::isNextEnabled() const { if ( !m_widget ) { // No way to have changed anything return true; } switch ( m_config->mode() ) { case PackageChooserMode::Optional: case PackageChooserMode::OptionalMultiple: // zero or one OR zero or more return true; case PackageChooserMode::Required: case PackageChooserMode::RequiredMultiple: // exactly one OR one or more return m_widget->hasSelection(); } __builtin_unreachable(); } bool PackageChooserViewStep::isBackEnabled() const { return true; } bool PackageChooserViewStep::isAtBeginning() const { return true; } bool PackageChooserViewStep::isAtEnd() const { return true; } void PackageChooserViewStep::onActivate() { if ( !m_widget->hasSelection() ) { m_widget->setSelection( m_config->defaultSelectionIndex() ); } } void PackageChooserViewStep::onLeave() { m_config->updateGlobalStorage( m_widget->selectedPackageIds() ); } Calamares::JobList PackageChooserViewStep::jobs() const { Calamares::JobList l; return l; } void PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setDefaultId( moduleInstanceKey() ); m_config->setConfigurationMap( configurationMap ); 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" ); } } if ( m_widget ) { hookupModel(); } } void PackageChooserViewStep::hookupModel() { if ( !m_config->model() || !m_widget ) { cError() << "Can't hook up model until widget and model both exist."; return; } m_widget->setModel( m_config->model() ); m_widget->setIntroduction( m_config->introductionPackage() ); } calamares-3.2.41.1/src/modules/packagechooser/PackageChooserViewStep.h000066400000000000000000000026501410275732300256320ustar00rootroot00000000000000/* === 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 PACKAGECHOOSERVIEWSTEP_H #define PACKAGECHOOSERVIEWSTEP_H #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include class Config; class PackageChooserPage; class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PackageChooserViewStep( QObject* parent = nullptr ); ~PackageChooserViewStep() override; QString prettyName() const override; QWidget* widget() 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; private: void hookupModel(); Config* m_config; PackageChooserPage* m_widget; CalamaresUtils::Locale::TranslatedString* m_stepName; // As it appears in the sidebar }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) #endif // PACKAGECHOOSERVIEWSTEP_H calamares-3.2.41.1/src/modules/packagechooser/PackageModel.cpp000066400000000000000000000070601410275732300241340ustar00rootroot00000000000000/* === 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 "PackageModel.h" #include "utils/Logger.h" #include "utils/Variant.h" PackageItem::PackageItem() {} PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description ) : id( a_id ) , name( a_name ) , description( a_description ) { } PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description, const QString& screenshotPath ) : id( a_id ) , name( a_name ) , description( a_description ) , screenshot( screenshotPath ) { } PackageItem::PackageItem::PackageItem( const QVariantMap& item_map ) : id( CalamaresUtils::getString( item_map, "id" ) ) , name( CalamaresUtils::Locale::TranslatedString( item_map, "name" ) ) , description( CalamaresUtils::Locale::TranslatedString( item_map, "description" ) ) , screenshot( CalamaresUtils::getString( item_map, "screenshot" ) ) , packageNames( CalamaresUtils::getStringList( item_map, "packages" ) ) { if ( name.isEmpty() && id.isEmpty() ) { name = QObject::tr( "No product" ); } else if ( name.isEmpty() ) { cWarning() << "PackageChooser item" << id << "has an empty name."; } if ( description.isEmpty() ) { description = QObject::tr( "No description provided." ); } } PackageListModel::PackageListModel( QObject* parent ) : QAbstractListModel( parent ) { } PackageListModel::PackageListModel( PackageList&& items, QObject* parent ) : QAbstractListModel( parent ) , m_packages( std::move( items ) ) { } PackageListModel::~PackageListModel() {} void PackageListModel::addPackage( PackageItem&& p ) { // Only add valid packages if ( p.isValid() ) { int c = m_packages.count(); beginInsertRows( QModelIndex(), c, c ); m_packages.append( p ); endInsertRows(); } } 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; } int PackageListModel::rowCount( const QModelIndex& index ) const { // For lists, valid indexes have zero children; only the root index has them return index.isValid() ? 0 : m_packages.count(); } QVariant PackageListModel::data( const QModelIndex& index, int role ) const { if ( !index.isValid() ) { return QVariant(); } int row = index.row(); if ( row >= m_packages.count() || row < 0 ) { return QVariant(); } if ( role == Qt::DisplayRole /* Also PackageNameRole */ ) { return m_packages[ row ].name.get(); } else if ( role == DescriptionRole ) { return m_packages[ row ].description.get(); } else if ( role == ScreenshotRole ) { return m_packages[ row ].screenshot; } else if ( role == IdRole ) { return m_packages[ row ].id; } return QVariant(); } calamares-3.2.41.1/src/modules/packagechooser/PackageModel.h000066400000000000000000000100361410275732300235760ustar00rootroot00000000000000/* === 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 PACKAGEMODEL_H #define PACKAGEMODEL_H #include "locale/TranslatableConfiguration.h" #include "utils/NamedEnum.h" #include #include #include #include struct PackageItem { QString id; CalamaresUtils::Locale::TranslatedString name; CalamaresUtils::Locale::TranslatedString description; QPixmap screenshot; QStringList packageNames; /// @brief Create blank PackageItem PackageItem(); /** @brief Creates a PackageItem from given strings * * This constructor sets all the text members, * but leaves the screenshot blank. Set that separately. */ PackageItem( const QString& id, const QString& name, const QString& description ); /** @brief Creates a PackageItem from given strings. * * Set all the text members and load the screenshot from the given * @p screenshotPath, which may be a QRC path (:/path/in/qrc) or * a filesystem path, whatever QPixmap understands. */ 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 ); /** @brief Is this item valid? * * A valid item has an untranslated name available. */ bool isValid() const { return !name.isEmpty(); } /** @brief Is this a (the) No-Package package? * * There should be at most one No-Package item in a collection * of PackageItems. That one will be used to describe a * "no package" situation. */ bool isNonePackage() const { return id.isEmpty(); } }; using PackageList = QVector< PackageItem >; class PackageListModel : public QAbstractListModel { public: PackageListModel( PackageList&& items, QObject* parent ); PackageListModel( QObject* parent ); ~PackageListModel() override; /** @brief Add a package @p to the model * * Only valid packages are added -- that is, they must have a name. */ void addPackage( PackageItem&& p ); int rowCount( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role ) const override; /// @brief Direct (non-abstract) access to package data const PackageItem& packageData( int r ) const { return m_packages[ r ]; } /// @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; enum Roles : int { NameRole = Qt::DisplayRole, DescriptionRole = Qt::UserRole, ScreenshotRole, IdRole }; private: PackageList m_packages; }; #endif calamares-3.2.41.1/src/modules/packagechooser/Tests.cpp000066400000000000000000000047711410275732300227300ustar00rootroot00000000000000/* === 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 "Tests.h" #ifdef HAVE_APPDATA #include "ItemAppData.h" #endif #ifdef HAVE_APPSTREAM #include "ItemAppStream.h" #endif #include "PackageModel.h" #include "utils/Logger.h" #include QTEST_MAIN( PackageChooserTests ) PackageChooserTests::PackageChooserTests() {} PackageChooserTests::~PackageChooserTests() {} void PackageChooserTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void PackageChooserTests::testBogus() { QVERIFY( true ); } void PackageChooserTests::testAppData() { // Path from the build-dir and from the running-the-test varies, // for in-source build, for build/, and for tests-in-build/, // so look in multiple places. QString appdataName( "io.calamares.calamares.appdata.xml" ); for ( const auto& prefix : QStringList { "", "../", "../../../", "../../../../" } ) { if ( QFile::exists( prefix + appdataName ) ) { appdataName = prefix + appdataName; break; } } QVERIFY( QFile::exists( appdataName ) ); QVariantMap m; m.insert( "appdata", appdataName ); #ifdef HAVE_XML PackageItem p1 = fromAppData( m ); QVERIFY( p1.isValid() ); QCOMPARE( p1.id, QStringLiteral( "io.calamares.calamares.desktop" ) ); QCOMPARE( p1.name.get(), QStringLiteral( "Calamares" ) ); // The entry has precedence 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." ) ); QVERIFY( p1.screenshot.isNull() ); m.insert( "id", "calamares" ); m.insert( "screenshot", ":/images/calamares.png" ); 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." ) ); QVERIFY( !p2.screenshot.isNull() ); #endif } calamares-3.2.41.1/src/modules/packagechooser/Tests.h000066400000000000000000000010751410275732300223670ustar00rootroot00000000000000/* === 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 PACKAGECHOOSERTESTS_H #define PACKAGECHOOSERTESTS_H #include class PackageChooserTests : public QObject { Q_OBJECT public: PackageChooserTests(); ~PackageChooserTests() override; private Q_SLOTS: void initTestCase(); void testBogus(); void testAppData(); }; #endif calamares-3.2.41.1/src/modules/packagechooser/images/000077500000000000000000000000001410275732300223565ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/packagechooser/images/calamares.png000066400000000000000000000201711410275732300250150ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsXXm7tEXtSoftwarewww.inkscape.org<IDATxy%U}ǿofce`d (}IԲRV*eECXFMRTʊAB2RRj, 00lo7ݵo}Ͻ޿xs{Yix#q["4n>|/(A B@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20Z ghu]}fzрJD2 PX>&']}fq1T*"PdP0Q2`A'H3d7e54BW]%H!tE`R]M.IHt% WXougR]EGM X D/ H>t/ H6t刎p?` $jĒ$,, $b;;`L q"0֠d0,^GAC@xyo|599 L "h#~cQ2h  KwUdaC@'oA&.d;_P+(€ phsxu-K%~FɊ5> dgmSsQcI&-~0f[eZ'(d!RX>6 Qc7jɧl02(lڅwڲ5fl}0Ŀ!7 sleGRL Bi6gPGWiI00/F&뎇0ҖdC0n$ Rmd6ȇL_I20/MdA_Sa.݁JӄD@7@L/@6@H? ~AA&+d>2r%7cgtŠ@os-@o~|ٗF@V z_y}9{7d]C3S|7Uw __{RW 2@ǐ@L )g: bIH,: @nfdKC0I5o1 :@I5O7NUD+d!4p}Pb ;d!4ڇI@ d!$HdD@L *ˏk.BTl"" &݊`A;J DIMUZ$.Sk!"e22 HAFCD#2wSbO{݁ Ą@3Ռ@ dE"an6%bF\LiƳet2V}}5r<ʮ?XۛԁA@LkESUuP{|0E?QT `d1'&t nd i& ld !)&6 tP5:80a$@Z/32WHE>iHL +J\L+&4 j)12 t-)~׊:g%h)p™z[UFOqz/j%Vb2aG$~H_f @JHh_O MW h42m t2&bw$Hr>uA!H)~@'oHh9n^2= 12ӯ !~7"\c,~ALRNc^v<>@h1ƴXt $M"/ cdSHk "( ܊b@X ~?@7g41,~IAAPA@i2/?S^ݎA) /<2_CZ7? qT!Q? 2yHG$#420Ry22&êdXy;@@4Sy*?hM hASќ&m ~>q@ͻB@2`TPaR?.~!}( L}yڞw|Q2-{˧jdĒ( v1ot[#h axGoOgW2c!wM'TN6 (Ǔ{*OejdD0C@L||,T9-ĿDzP9kMGy-hCo )KcBI6^YB@BAj)%4G]C]7 /53+GNjqٶB{)P@NNmʫsGeH )y+( DSiB/"vD2${:,T ( AmT|  BALyR(n_  3g<7 Y} a- E0r(m'lʃ`.V6ݖG^ +dDd0yP| <' 9;S<'{B@Ć bA("eaؑSZH@@Ē%Bs؉ɩEy8yԡuԪVxQ|s Er>X CEhjW'6;w:+Ckk/{KlqK=1V>(fbN r97c&椈  1s CQ7Uze aJ$~Wٹ@=9k€ř6žBu+-"<\mQſƠj ݷ}{?ݦ-1%%TEM1pywW/@t#^B~|+sBQ[MېHM @N^=oDUU'پ ^l޻IOH w~Ga nxd ) 9aH]) |aX/ҷ[ @d 0ŗ@.= 1엡.I@X(Ca u;|݁A]h22 ,I"N~ `q88ثOzl5Z 0 V.|q7Id0pd/kOS @i@~X|`֫uD]1߻t]'p7pqETJEh|q,uaF V^`Wl. Tt07;?DZs)ظi3v^x!6nI#O= >3b[`K  ~@tYFkoV@/ _y ~u V\kk׭tJ`?lw` w|oR~ʏ}|Wnoۙ~/xXWw`a;kC)H>Þ~@0&o<)ʗ|~`j`;o@y> YG W]7߂!aؙSAP{P>񯀒g?6}a-;>90 ?^ \#&&=OӀ'-@#}?4k{<c9ÿE(p̙@ϣvG 9Uh߿l@Bzam2Fz~ B=o^-߁Y[B=oT?L֪8y8ݱ#hKQ~O)R|bcP篁rw W:ǎF_LMNb޽So?.CP+;¨Cy˨Uѕ!ShhI.fg#+Cpn_ HLOM(?Nw{ ? ^OkbKN9t &'0 _ЧG0C8=s&M@Q3m<`3rxcvncH033}?u3ǾY?D]ԣԊ8am y -/_ٱ`}='67ڬj$dri}PpDrX[=yVNR%Ǐ;k`ꈟ b26hL8GZhZf,Ԭ]̎Hcl]7;/ 槁'E"G:npj#ZOx-*T+~PVQ(( e?.roFDKU1/T.M~osr2#c(Λo/j|%c{ Ԭ[|ˋH8*ȹ9mppԪryef}0֞cnDΟ{Se2epsv ˑ t+;Px9Ldյv$~ZFc]( Z<}6`aƖGi娏0_*Zk9R1'eӍ'`ǻ+4Ù Wl|~ bVE0*vv`a 8z4bج[\1]A!&Ø+0CVc5cD#Әp4Z4bƭ|ď8)9W+(wdv}ܮg#!Ua cgjs1j}.֫5^&)rfͩ?Ԯdl[g2"~R)v݁|>su1##زm' Ӡ_i -Fn~lxbx 08p[G!ڏ1ULIyQ|wFUzJ믴5hձ]?aGTQ7m}\sWhhŗ\)?j?cΐ+>JvqKrN8anV}9sGNp~g<ʍ_x'L5(֝]GQ"M uipJ7h742K/"zmb8s~ĐLA;#[X^;>a*v藍)g #+Qy_o]qVϰRg.GREĪի#9i-x@+ >S7 D&ⷿvߋ҆qOOY T1z;122ykそCTƪs B0 8qwP]c6<޽s`/o!(ӯ~.:n;p t'U} n9l\y58'AHӷ~G'0_cp+{OlvhhIP`ϻ8Dc)ۍ7 ^vS߮;fj>;.~Mtz7b>(,^)u!N͞LAmuX(0tr?| ? \tE\ b?R.~ 0p ,:K QpS`z(JlLM oZöW\C34S&Q<7F 4q,{N L.~aDşb10ROFE9W/kL"</:Jc`ظi3v+W KBjk5LNM¨ȕ0#>/B{;i}hJk.BqeX{V9fgP00}c>Sc`0WU7b,n5Z(:BƍW7(jUWc݆ غu;C]a{ Ph8IAUcQ^YfwMDh#~K}UNkӸ)~33(U;sj4< UoDk3%~}-9(~R ~7P*QQ.*\cc@uLMM¨s0ƭ&$`Q{sٹYTJe;ZUN=A|IuGNXr%8`62!hnKĒ\fQH!> "LCj"7I%Ki5+ V` X>19̢T.YmFʭ1p3~8%~>96wo&.iR&wiX|9fffNŝ7EҝRoS58}y";)ݼa5I' `T*Q~_ܭa7C07dԑ}`% Փr3.iR&R-apGV+3ۛM'ҭg$~qgcY8'kȏ5˅ 6ar||;r K)wjZO \SN@zNSr9LL,nPp~6c㤈@ɚ~'/:66AC븳VhON]ӤzMz='w5aٲeӉ4oȨ!jwC)\>0RZ*?nRh@./S\.B0@B}T0`%cW.r4V9-Q\ sLIT@FQU yįyh O w\` &pF&=f9hsg.C_z]^9L0ỉ0z(v0;9hǦ'.AA@ 2 Ad20daok\IENDB`calamares-3.2.41.1/src/modules/packagechooser/images/calamares.png.license000066400000000000000000000001421410275732300264320ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/packagechooser/images/no-selection.png000066400000000000000000000032551410275732300254700ustar00rootroot00000000000000PNG  IHDR\rf pHYs+_IDATxݿk]|eSCII"p)ޜŐHS ? xqmݛ.] U#ghz)d`)$UI ĦcM RHJ :^|AG~"W]\3wնgۦ^٤ikxx,///o]iTKz>GlmmnkLs;{'Otc=xСLǟ~ve?uxJU|:}fG5W/|đ_zh4aFQ'3 X.ɿzn+b`&7w/8 `o8XWoL0`}'ۛsK>=f>?P߯bL,&!ۯcLW@]1o `ܛo&f>c2@4@LL @0? U&f0}3@0 o OL0dFzf`&  ܜfAlOg` &L @0` &L @0` &L @0` &L @0` &L @0` &L @0` &L @0` &L @0` &L @0` &L @0` &L @i0mOk×5дQUݟr]>ٛ;{@\ZYzs2`L&ZYzث]wƍ;.m~yN'F. x׿_|G/[6֕fj@ںsznNg^=6LU-91iڨ7ޮY//'IENDB`calamares-3.2.41.1/src/modules/packagechooser/images/no-selection.png.license000066400000000000000000000001701410275732300271020ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/packagechooser/packagechooser.conf000066400000000000000000000156311410275732300247440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration for the low-density software chooser --- # Software selection mode, to set whether the software packages # can be chosen singly, or multiply. # # 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_*. Normally, 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*. # You can set *id* to change that, but it is not recommended. # # 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. # The *id* key is not used. # # 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 # The *id* key is used only in "legacy" mode # id: "" # 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 id "". # labels: step: "Packages" step[nl]: "Pakketten" # (Optional) 'id' of pre-selected list-view item. # Pre-selects one of the items below. # default: kde # Items to display in the chooser. In general, this should be a # pretty short list to avoid overwhelming the UI. This is a list # of objects, and the items are displayed in list order. # # Either provide the data for an item in the list (using the keys # below), or use existing AppData XML files, or use AppStream cache # 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 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. The name and description given for the "no package # selected" item are displayed when the module starts. # # 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". # # The following field is **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). # # # 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. # This file is parsed to provide the id (from AppData id), name # (from AppData name), description (from AppData description paragraphs # or the summary entries), and a screenshot (the default screenshot # from AppData). No package is set (but that is unused anyway). # # AppData may contain IDs that are not useful inside Calamares, # and the screenshot URL may be remote -- a remote URL will not # be loaded and the screenshot will be missing. An item with *appdata* # **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 # cache for that ID. The package name is set from the AppStream data. # # An item for AppStream may also contain an *id* and a *screenshot* # key which will override the data from AppStream. items: - id: "" # packages: [] # This item installs no packages name: "No Desktop" name[nl]: "Geen desktop" description: "Please pick a desktop environment from the list. If you don't want to install a desktop, that's fine, your system will start up in text-only mode and you can install a desktop environment later." description[nl]: "Kies eventueel een desktop-omgeving uit deze lijst. Als u geen desktop-omgeving wenst te gebruiken, kies er dan geen. In dat geval start het systeem straks op in tekst-modus en kunt u later alsnog een desktop-omgeving installeren." screenshot: ":/images/no-selection.png" - id: kde packages: [ kde-frameworks, kde-plasma, kde-gear ] name: Plasma Desktop description: "KDE Plasma Desktop, simple by default, a clean work area for real-world usage which intends to stay out of your way. Plasma is powerful when needed, enabling the user to create the workflow that makes them more effective to complete their tasks." screenshot: ":/images/kde.png" - id: gnome packages: [ gnome-all ] name: GNOME description: GNU Networked Object Modeling Environment Desktop screenshot: ":/images/gnome.png" - id: calamares appdata: ../io.calamares.calamares.appdata.xml screenshot: ":/images/calamares.png" - id: kate appstream: org.kde.kwrite.desktop calamares-3.2.41.1/src/modules/packagechooser/packagechooser.qrc000066400000000000000000000002201410275732300245700ustar00rootroot00000000000000 images/no-selection.png images/calamares.png calamares-3.2.41.1/src/modules/packagechooser/page_package.ui000066400000000000000000000051221410275732300240370ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2019 Adriaan de Groot <groot@kde.org> SPDX-License-Identifier: GPL-3.0-or-later PackageChooserPage 0 0 400 500 0 1 Form 0 1 Product Name 1 0 TextLabel Qt::AlignCenter 0 2 Long Product Description true true calamares-3.2.41.1/src/modules/packages/000077500000000000000000000000001410275732300177115ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/packages/main.py000066400000000000000000000545671410275732300212300ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import abc from string import Template import subprocess import libcalamares from libcalamares.utils import check_target_env_call, target_env_call 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 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 INSTALL = object() REMOVE = object() mode_packages = None # Changes to INSTALL or REMOVE def _change_mode(mode): global mode_packages mode_packages = mode libcalamares.job.setprogress(completed_packages * 1.0 / total_packages) def pretty_name(): return _("Install packages.") def pretty_status_message(): if not group_packages: if (total_packages > 0): # Outside the context of an operation s = _("Processing packages (%(count)d / %(total)d)") else: s = _("Install packages.") elif mode_packages is INSTALL: s = _n("Installing one package.", "Installing %(num)d packages.", group_packages) elif mode_packages is REMOVE: s = _n("Removing one package.", "Removing %(num)d packages.", group_packages) else: # No mode, generic description s = _("Install packages.") return s % {"num": group_packages, "count": completed_packages, "total": total_packages} class PackageManager(metaclass=abc.ABCMeta): """ Package manager base class. A subclass implements package management for a specific backend, and must have a class property `backend` with the string identifier for that backend. Subclasses are collected below to populate the list of possible backends. """ backend = None @abc.abstractmethod def install(self, pkgs, from_local=False): """ Install a list of packages (named) into the system. Although this handles lists, in practice it is called with one package at a time. @param pkgs: list[str] list of package names @param from_local: bool if True, then these are local packages (on disk) and the pkgs names are paths. """ pass @abc.abstractmethod def remove(self, pkgs): """ Removes packages. @param pkgs: list[str] list of package names """ pass @abc.abstractmethod def update_db(self): pass def run(self, script): if script != "": check_target_env_call(script.split(" ")) def install_package(self, packagedata, from_local=False): """ Install a package from a single entry in the install list. This can be either a single package name, or an object with pre- and post-scripts. If @p packagedata is a dict, it is assumed to follow the documented structure. @param packagedata: str|dict @param from_local: bool see install.from_local """ if isinstance(packagedata, str): self.install([packagedata], from_local=from_local) else: self.run(packagedata["pre-script"]) self.install([packagedata["package"]], from_local=from_local) self.run(packagedata["post-script"]) def remove_package(self, packagedata): """ Remove a package from a single entry in the remove list. This can be either a single package name, or an object with pre- and post-scripts. If @p packagedata is a dict, it is assumed to follow the documented structure. @param packagedata: str|dict """ if isinstance(packagedata, str): self.remove([packagedata]) else: self.run(packagedata["pre-script"]) 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). 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(["apk", "add", pkg]) def remove(self, pkgs): for pkg in pkgs: check_target_env_call(["apk", "del", pkg]) def update_db(self): check_target_env_call(["apk", "update"]) def update_system(self): check_target_env_call(["apk", "upgrade", "--available"]) class PMApt(PackageManager): backend = "apt" def install(self, pkgs, from_local=False): check_target_env_call(["apt-get", "-q", "-y", "install"] + pkgs) def remove(self, pkgs): check_target_env_call(["apt-get", "--purge", "-q", "-y", "remove"] + pkgs) check_target_env_call(["apt-get", "--purge", "-q", "-y", "autoremove"]) def update_db(self): check_target_env_call(["apt-get", "update"]) def update_system(self): # Doesn't need to update the system explicitly pass 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 PMDummy(PackageManager): backend = "dummy" def install(self, pkgs, from_local=False): from time import sleep libcalamares.utils.debug("Dummy backend: Installing " + str(pkgs)) sleep(3) def remove(self, pkgs): from time import sleep libcalamares.utils.debug("Dummy backend: Removing " + str(pkgs)) sleep(3) def update_db(self): libcalamares.utils.debug("Dummy backend: Updating DB") def update_system(self): libcalamares.utils.debug("Dummy backend: Updating System") def run(self, script): 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 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) def remove(self, pkgs): check_target_env_call(["pacman", "-Rs", "--noconfirm"] + pkgs) def update_db(self): check_target_env_call(["pacman", "-Sy"]) def update_system(self): check_target_env_call(["pacman", "-Su", "--noconfirm"]) 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" def install(self, pkgs, from_local=False): check_target_env_call(["pisi", "install" "-y"] + pkgs) def remove(self, pkgs): check_target_env_call(["pisi", "remove", "-y"] + pkgs) def update_db(self): check_target_env_call(["pisi", "update-repo"]) def update_system(self): # Doesn't need to update the system explicitly pass 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 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, # and index them based on the backend property of each class. backend_managers = [ (c.backend, c) for c in globals().values() if type(c) is abc.ABCMeta and issubclass(c, PackageManager) and c.backend] def subst_locale(plist): """ Returns a locale-aware list of packages, based on @p plist. Package names that contain LOCALE are localized with the BCP47 name of the chosen system locale; if the system locale is 'en' (e.g. English, US) then these localized packages are dropped from the list. @param plist: list[str|dict] Candidate packages to install. @return: list[str|dict] """ locale = libcalamares.globalstorage.value("locale") if not locale: # It is possible to skip the locale-setting entirely. # Then pretend it is "en", so that {LOCALE}-decorated # package names are removed from the list. locale = "en" ret = [] for packagedata in plist: if isinstance(packagedata, str): packagename = packagedata else: packagename = packagedata["package"] # Update packagename: substitute LOCALE, and drop packages # if locale is en and LOCALE is in the package name. if locale != "en": packagename = Template(packagename).safe_substitute(LOCALE=locale) elif 'LOCALE' in packagename: packagename = None if packagename is not None: # Put it back in packagedata if isinstance(packagedata, str): packagedata = packagename else: packagedata["package"] = packagename ret.append(packagedata) return ret def run_operations(pkgman, entry): """ Call package manager with suitable parameters for the given package actions. :param pkgman: PackageManager This is the manager that does the actual work. :param entry: dict Keys are the actions -- e.g. "install" -- to take, and the values are the (list of) packages to apply the action to. The actions are not iterated in a specific order, so it is recommended to use only one action per dictionary. The list of packages may be package names (strings) or package information dictionaries with pre- and post-scripts. """ global group_packages, completed_packages, mode_packages for key in entry.keys(): package_list = subst_locale(entry[key]) group_packages = len(package_list) if key == "install": _change_mode(INSTALL) pkgman.operation_install(package_list) elif key == "try_install": _change_mode(INSTALL) pkgman.operation_try_install(package_list) elif key == "remove": _change_mode(REMOVE) pkgman.operation_remove(package_list) elif key == "try_remove": _change_mode(REMOVE) pkgman.operation_try_remove(package_list) elif key == "localInstall": _change_mode(INSTALL) pkgman.operation_install(package_list, from_local=True) elif key == "source": libcalamares.utils.debug("Package-list from {!s}".format(entry[key])) else: libcalamares.utils.warning("Unknown package-operation key {!s}".format(key)) completed_packages += len(package_list) libcalamares.job.setprogress(completed_packages * 1.0 / total_packages) libcalamares.utils.debug("Pretty name: {!s}, setting progress..".format(pretty_name())) group_packages = 0 _change_mode(None) def run(): """ Calls routine with detected package manager to install locale packages or remove drivers not needed on the installed system. :return: """ global mode_packages, total_packages, completed_packages, group_packages backend = libcalamares.job.configuration.get("backend") for identifier, impl in backend_managers: if identifier == backend: pkgman = impl() break else: return "Bad backend", "backend=\"{}\"".format(backend) skip_this = libcalamares.job.configuration.get("skip_if_no_internet", False) if skip_this and not libcalamares.globalstorage.value("hasInternet"): libcalamares.utils.warning( "Package installation has been skipped: no internet" ) return None update_db = libcalamares.job.configuration.get("update_db", False) if update_db and libcalamares.globalstorage.value("hasInternet"): 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"): 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"): operations += libcalamares.globalstorage.value("packageOperations") mode_packages = None total_packages = 0 completed_packages = 0 for op in operations: for packagelist in op.values(): total_packages += len(subst_locale(packagelist)) if not total_packages: # Avoids potential divide-by-zero in progress reporting return None for entry in operations: group_packages = 0 libcalamares.utils.debug(pretty_name()) 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) return None calamares-3.2.41.1/src/modules/packages/module.desc000066400000000000000000000002301410275732300220310ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "packages" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/packages/packages.conf000066400000000000000000000177371410275732300223550ustar00rootroot00000000000000# 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: # - 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 # - yum - Yum RPM frontend # - zypp - Zypp RPM frontend # # Not actually a package manager, but suitable for testing: # - dummy - Dummy manager, only logs # backend: dummy # # Often package installation needs an internet connection. # Since you may allow system installation without a connection # and want to offer OPTIONAL package installation, it's # possible to have no internet, yet have this packages module # enabled in settings. # # You can skip the whole module when there is no internet # by setting "skip_if_no_internet" to true. # # You can run a package-manager specific update procedure # before installing packages (for instance, to update the # list of packages and dependencies); this is done only if there # is an internet connection. # # Set "update_db" to 'true' for refreshing the database on the # target system. On target installations, which got installed by # unsquashing, a full system update may be needed. Otherwise # post-installing additional packages may result in conflicts. # Therefore set also "update_system" to 'true'. # skip_if_no_internet: false update_db: true update_system: false # # List of maps with package operations such as install or remove. # Distro developers can provide a list of packages to remove # from the installed system (for instance packages meant only # for the live system). # # A job implementing a distro specific logic to determine other # packages that need to be installed or removed can run before # this one. Distro developers may want to install locale packages # or remove drivers not needed on the installed system. # Such a job would populate a list of dictionaries in the global # storage called "packageOperations" and that list is processed # after the static list in the job configuration (i.e. the list # that is in this configuration file). # # Allowed package operations are: # - *install*, *try_install*: will call the package manager to # install one or more packages. The install target will # abort the whole installation if package-installation # fails, while try_install carries on. Packages may be # listed as (localized) names, or as (localized) package-data. # See below for the description of the format. # - *localInstall*: this is used to call the package manager # to install a package from a path-to-a-package. This is # useful if you have a static package archive on the install media. # The *pacman* package manager is the only one to specially support # this operation (all others treat this the same as *install*). # - *remove*, *try_remove*: will call the package manager to # remove one or more packages. The remove target will # abort the whole installation if package-removal fails, # while try_remove carries on. Packages may be listed as # (localized) names. # One additional key is recognized, to help netinstall out: # - *source*: ignored, does get logged # Any other key is ignored, and logged as a warning. # # There are two formats for naming packages: as a name or as package-data, # which is an object notation providing package-name, as well as pre- and # post-install scripts. # # Here are both formats, for installing vi. The first one just names the # package for vi (using the naming of the installed package manager), while # the second contains three data-items; the pre-script is run before invoking # the package manager, and the post-script runs once it is done. # # - install # - vi # - package: vi # pre-script: touch /tmp/installing-vi # post-script: rm -f /tmp/installing-vi # # The pre- and post-scripts are optional, but you cannot leave both out # if you do use the *package* key: using "package: vi" with neither script # option will trick Calamares into trying to install a package named # "package: vi", which is unlikely to work. # # The pre- and post-scripts are **not** executed by a shell unless you # explicitly invoke `/bin/sh` in them. The command-lines are passed # to exec(), which does not understand shell syntax. In other words: # # pre-script: ls | wc -l # # Will fail, because `|` is passed as a command-line argument to ls, # as are `wc`, and `-l`. No shell pipeline is set up, and ls is likely # to complain. Invoke the shell explicitly: # # pre-script: /bin/sh -c \"ls | wc -l\" # # The above note on shell-expansion applies to versions up-to-and-including # Calamares 3.2.12, but will change in future. # # Any package name may be localized; this is used to install localization # packages for software based on the selected system locale. By including # the string `LOCALE` in the package name, the following happens: # # - if the system locale is English (any variety), then the package is not # installed at all, # - otherwise `$LOCALE` or `${LOCALE}` is replaced by the 'lower-cased' BCP47 # name of the 'language' part of the selected system locale (not the # country/region/dialect part), e.g. selecting "nl_BE" will use "nl" # here. # # Take care that just plain `LOCALE` will not be replaced, so `foo-LOCALE` will # be left unchanged, while `foo-$LOCALE` will be changed. However, `foo-LOCALE` # **will** be removed from the list of packages (i.e. not installed), if # English is selected. If a non-English locale is selected, then `foo-LOCALE` # will be installed, unchanged (no language-name-substitution occurs). # # The following installs localizations for vi, if they are relevant; if # there is no localization, installation continues normally. # # - install # - vi-$LOCALE # - package: vi-${LOCALE} # pre-script: touch /tmp/installing-vi # post-script: rm -f /tmp/installing-vi # # When installing packages, Calamares will invoke the package manager # with a list of package names if it can; package-data prevents this because # of the scripts that need to run. In other words, this: # # - install: # - vi # - binutils # - package: wget # pre-script: touch /tmp/installing-wget # # This will invoke the package manager three times, once for each package, # because not all of them are simple package names. You can speed up the # process if you have only a few pre-scripts, by using multiple install targets: # # - install: # - vi # - binutils # - install: # - package: wget # pre-script: touch /tmp/installing-wget # # This will call the package manager once with the package-names "vi" and # "binutils", and then a second time for "wget". When installing large numbers # of packages, this can lead to a considerable time savings. # operations: - install: - vi - vi-${LOCALE} - wget - binutils - remove: - vi - wget - binutils calamares-3.2.41.1/src/modules/packages/packages.schema.yaml000066400000000000000000000023271410275732300236160ustar00rootroot00000000000000# 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 } 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 ] calamares-3.2.41.1/src/modules/packages/test.yaml000066400000000000000000000004171410275732300215560ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 backend: dummy rootMountPoint: /tmp/mount operations: - install: - pre-script: touch /tmp/foo package: vi post-script: rm /tmp/foo - wget - binutils - remove: - vi - wget calamares-3.2.41.1/src/modules/partition/000077500000000000000000000000001410275732300201445ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/partition/CMakeLists.txt000066400000000000000000000104621410275732300227070ustar00rootroot00000000000000# === 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). If you **do** allow unsafe partitioning, # it will error out at runtime unless you **also** switch **off** # DEBUG_PARTITION_LAME, at which point you are welcome to shoot # yourself in the foot. option( DEBUG_PARTITION_UNSAFE "Allow unsafe partitioning choices." OFF ) option( DEBUG_PARTITION_LAME "Unsafe partitioning will error out on exec." ON ) # 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 ) endif() list( APPEND _partition_defs DEBUG_PARTITION_UNSAFE ) endif() if ( DEBUG_FILESYSTEMS ) list( APPEND _partition_defs DEBUG_FILESYSTEMS ) endif() find_package(ECM ${ECM_VERSION} REQUIRED NO_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 ) list( APPEND _partition_defs ${KPMcore_API_DEFINITIONS} ) include_directories( ${KPMCORE_INCLUDE_DIR} ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) add_subdirectory( tests ) calamares_add_plugin( partition TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES Config.cpp PartitionViewStep.cpp core/BootLoaderModel.cpp core/ColorUtils.cpp core/DeviceList.cpp core/DeviceModel.cpp core/KPMHelpers.cpp core/PartitionActions.cpp core/PartitionCoreModule.cpp core/PartitionInfo.cpp core/PartitionLayout.cpp core/PartitionModel.cpp core/PartUtils.cpp gui/BootInfoWidget.cpp gui/ChoicePage.cpp gui/CreatePartitionDialog.cpp gui/CreateVolumeGroupDialog.cpp gui/DeviceInfoWidget.cpp gui/EditExistingPartitionDialog.cpp gui/EncryptWidget.cpp gui/ListPhysicalVolumeWidgetItem.cpp gui/PartitionPage.cpp gui/PartitionBarsView.cpp gui/PartitionDialogHelpers.cpp gui/PartitionLabelsView.cpp gui/PartitionSizeController.cpp gui/PartitionSplitterWidget.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 jobs/CreatePartitionTableJob.cpp jobs/CreateVolumeGroupJob.cpp jobs/DeactivateVolumeGroupJob.cpp jobs/DeletePartitionJob.cpp jobs/FillGlobalStorageJob.cpp jobs/FormatPartitionJob.cpp jobs/PartitionJob.cpp jobs/RemoveVolumeGroupJob.cpp jobs/ResizePartitionJob.cpp jobs/ResizeVolumeGroupJob.cpp jobs/SetPartitionFlagsJob.cpp UI gui/ChoicePage.ui gui/CreatePartitionDialog.ui gui/CreatePartitionTableDialog.ui gui/EditExistingPartitionDialog.ui gui/EncryptWidget.ui gui/PartitionPage.ui gui/ReplaceWidget.ui gui/VolumeGroupBaseDialog.ui LINK_PRIVATE_LIBRARIES kpmcore KF5::CoreAddons COMPILE_DEFINITIONS ${_partition_defs} SHARED_LIB ) else() if ( NOT KPMcore_FOUND ) calamares_skip_module( "partition (missing suitable KPMcore)" ) else() calamares_skip_module( "partition (missing dependencies for KPMcore)" ) endif() endif() calamares-3.2.41.1/src/modules/partition/Config.cpp000066400000000000000000000300701410275732300220550ustar00rootroot00000000000000/* === 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 "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 ); } } 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" ) ) { gs->insert( "efiSystemPartitionSize", CalamaresUtils::getString( configurationMap, "efiSystemPartitionSize" ) ); } // 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*"; m_initialSwapChoice = pickOne( m_swapChoices ); } setSwapChoice( m_initialSwapChoice ); m_allowManualPartitioning = CalamaresUtils::getBool( configurationMap, "allowManualPartitioning", true ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); m_requiredPartitionTableType = CalamaresUtils::getStringList( configurationMap, "requiredPartitionTableType" ); gs->insert( "requiredPartitionTableType", m_requiredPartitionTableType ); 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 ); } } calamares-3.2.41.1/src/modules/partition/Config.h000066400000000000000000000136721410275732300215330ustar00rootroot00000000000000/* === 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 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; } 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 calamares-3.2.41.1/src/modules/partition/PartitionViewStep.cpp000066400000000000000000000545321410275732300243210ustar00rootroot00000000000000/* === 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" ); } QWidget* PartitionViewStep::widget() { return m_widget; } 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 ); const auto* branding = Calamares::Branding::instance(); 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 Config::InstallChoice::Alongside: modeText = tr( "Install %1 alongside another operating system." ) .arg( branding->shortVersionedName() ); break; case Config::InstallChoice::Erase: modeText = tr( "Erase disk and install %1." ).arg( branding->shortVersionedName() ); break; case Config::InstallChoice::Replace: modeText = tr( "Replace a partition with %1." ).arg( branding->shortVersionedName() ); break; case Config::InstallChoice::NoChoice: case Config::InstallChoice::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 Config::InstallChoice::Alongside: modeText = tr( "Install %1 alongside another operating system on disk " "%2 (%3)." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case Config::InstallChoice::Erase: modeText = tr( "Erase disk %2 (%3) and install %1." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case Config::InstallChoice::Replace: modeText = tr( "Replace a partition on disk %2 (%3) with %1." ) .arg( branding->shortVersionedName() ) .arg( info.deviceNode ) .arg( info.deviceName ); break; case Config::InstallChoice::NoChoice: case Config::InstallChoice::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::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 ); } 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( WindowBackground, pal.window().color().lighter( 108 ) ); jobsLabel->setAutoFillBackground( true ); jobsLabel->setPalette( pal ); } return 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; } 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 bios_grub partition"; return false; } } } cDebug() << Logger::SubEntry << "No suitable partition for bios_grub 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(); const QString espFlagName = PartitionTable::flagName( #ifdef WITH_KPMCORE4API PartitionTable::Flag::Boot #else PartitionTable::FlagEsp #endif ); Partition* esp = m_core->findPartitionByMountPoint( espMountPoint ); QString message; QString description; if ( !esp || ( esp && !PartUtils::isEfiFilesystemSuitable( 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 " "%3 flag enabled and mount point " "%2.

" "You can continue without setting up an EFI system " "partition but your system may fail to start." ) .arg( branding->shortProductName() ) .arg( espMountPoint, espFlagName ); } 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 %3 " "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( branding->shortProductName() ) .arg( espMountPoint, espFlagName ); } if ( !message.isEmpty() ) { cWarning() << message; QMessageBox::warning( m_manualPartitionPage, message, description ); } } else { cDebug() << "device: BIOS"; if ( shouldWarnForGPTOnBIOS( m_core ) ) { 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( 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 ) { 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->initLayout( 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 >(); ) calamares-3.2.41.1/src/modules/partition/PartitionViewStep.h000066400000000000000000000042101410275732300237520ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONVIEWSTEP_H #define PARTITIONVIEWSTEP_H #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" #include #include class ChoicePage; class Config; class PartitionPage; class PartitionCoreModule; class QStackedWidget; class WaitingWidget; template < typename T > class QFutureWatcher; /** * The starting point of the module. Instantiates PartitionCoreModule, * ChoicePage and PartitionPage, then connects them. */ class PLUGINDLLEXPORT PartitionViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PartitionViewStep( QObject* parent = nullptr ); ~PartitionViewStep() override; QString prettyName() const override; QWidget* createSummaryWidget() const override; QWidget* widget() override; void next() override; void back() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onActivate() override; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; Calamares::JobList jobs() const override; Calamares::RequirementsList checkRequirements() override; 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; WaitingWidget* m_waitingWidget; QFutureWatcher< void >* m_future; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PartitionViewStepFactory ) #endif // PARTITIONVIEWSTEP_H calamares-3.2.41.1/src/modules/partition/README.md000066400000000000000000000075131410275732300214310ustar00rootroot00000000000000# Architecture ## Overview The heart of the module is the PartitionCoreModule class. It holds Qt models for the various elements and can create Calamares jobs representing the changes to be performed at install time. PartitionPage is the main UI class. It represents the module main page, the one with the device combo box, partition list and action buttons. It reacts to the buttons by creating various dialogs (the (...)Dialog classes) and tell PartitionCoreModule what to do. ## Use of KPMcore This module depends on KPMcore, the same library used by [KDE Partition Manager][kpm]. [kpm]: http://sourceforge.net/projects/partitionman/ ## Partition and PartitionInfo Calamares needs to store some information about partitions which is not available in Partition Manager's Partition class. This includes the install mount point and a boolean to mark whether an existing partition should be formatted. Reusing the existing `Partition::mountPoint` property was not an option because it stores the directory where a partition is currently mounted, which is a different concept from the directory where the user wants the partition to be mounted on the installed system. We can't hijack this to store our install mount point because whether the partition is currently mounted is an important information which should be taken into account later to prevent any modification on an installed partition. The way this extra information is stored is a bit unusual: the functions in the PartitionInfo namespace takes advantage of Qt dynamic properties methods to add Calamares-specific properties to the Partition instances: setting the install mount point is done with `PartitionInfo::setMountPoint(partition, "/")`, retrieving it is done with `mountPoint = PartitionInfo::mountPoint(partition)`. The rational behind this unusual design is simplicity: the alternative would have been to keep a separate PartitionInfo object and a map linking each Partition to its PartitionInfo instance. Such a design makes things more complicated. It complicates memory management: if a Partition goes away, its matching PartitionInfo must be removed. It also leads to uglier APIs: code which needs access to extra partition information must be passed both Partition and PartitionInfo instances or know a way to get a PartitionInfo from a Partition. The other alternative would have been to add Calamares-specific information to the real Partition object. This would have worked and would have made for a less surprising API, but it would mean more Calamares-specific patches on KPMcore. # Tests The module comes with unit tests for the partition jobs. Those tests need to run on storage device which does not contain any data you care about. To build them: cd $top_build_dir make buildtests To run them you need to define the `CALAMARES_TEST_DISK` environment variable. It should contain the device path to the test disk. For example, assuming you plugged a test USB stick identified as `/dev/sdb`, you would run the tests like this: sudo CALAMARES_TEST_DISK=/dev/sdb $top_build_dir/partitionjobtests # TODO - Support resizing extended partitions. ResizePartitionJob should already support this but the UI prevents editing of extended partitions for now. - Use os-prober to find out the installed OS. This information could then be used in PartitionModel and in the partition views. - PartitionBarsView - Show used space - Highlight selected partition - Make the partitions clickable - Match appearance with PartResizerWidget appearance - Expose PartitionInfo::format in PartitionModel and add a column for it in the tree view calamares-3.2.41.1/src/modules/partition/core/000077500000000000000000000000001410275732300210745ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/partition/core/BootLoaderModel.cpp000066400000000000000000000121011410275732300246060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/BootLoaderModel.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "utils/Logger.h" // KPMcore #include #include #include static QStandardItem* createBootLoaderItem( const QString& description, const QString& path, bool isPartition ) { QStandardItem* item = new QStandardItem( description ); item->setData( path, BootLoaderModel::BootLoaderPathRole ); item->setData( isPartition, BootLoaderModel::IsPartitionRole ); return item; } BootLoaderModel::BootLoaderModel( QObject* parent ) : QStandardItemModel( parent ) { } BootLoaderModel::~BootLoaderModel() {} void BootLoaderModel::init( const QList< Device* >& devices ) { beginResetModel(); blockSignals( true ); m_devices = devices; updateInternal(); blockSignals( false ); endResetModel(); } void BootLoaderModel::createMbrItems() { for ( auto device : m_devices ) { QString text = tr( "Master Boot Record of %1" ).arg( device->name() ); appendRow( createBootLoaderItem( text, device->deviceNode(), false ) ); } } void BootLoaderModel::update() { beginResetModel(); blockSignals( true ); updateInternal(); blockSignals( false ); endResetModel(); } void BootLoaderModel::updateInternal() { QMutexLocker lock( &m_lock ); clear(); createMbrItems(); // An empty model is possible if you don't havee permissions: don't crash though. if ( rowCount() < 1 ) { return; } QString partitionText; Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, "/boot" ); if ( partition ) { partitionText = tr( "Boot Partition" ); } else { partition = KPMHelpers::findPartitionByMountPoint( m_devices, "/" ); if ( partition ) { partitionText = tr( "System Partition" ); } } Q_ASSERT( rowCount() > 0 ); QStandardItem* last = item( rowCount() - 1 ); Q_ASSERT( last ); bool lastIsPartition = last->data( IsPartitionRole ).toBool(); if ( !partition ) { if ( lastIsPartition ) { takeRow( rowCount() - 1 ); } } else { QString mountPoint = PartitionInfo::mountPoint( partition ); if ( lastIsPartition ) { last->setText( partitionText ); last->setData( mountPoint, BootLoaderPathRole ); } else { appendRow( createBootLoaderItem( partitionText, PartitionInfo::mountPoint( partition ), true ) ); } // Create "don't install bootloader" item appendRow( createBootLoaderItem( tr( "Do not install a boot loader" ), QString(), false ) ); } } QVariant BootLoaderModel::data( const QModelIndex& index, int role ) const { QMutexLocker lock( &m_lock ); if ( role == Qt::DisplayRole ) { QString displayRole = QStandardItemModel::data( index, Qt::DisplayRole ).toString(); QString pathRole = QStandardItemModel::data( index, BootLoaderModel::BootLoaderPathRole ).toString(); if ( pathRole.isEmpty() ) { return displayRole; } return tr( "%1 (%2)" ).arg( displayRole, pathRole ); } return QStandardItemModel::data( index, role ); } std::pair< int, Device* > BootLoaderModel::findBootLoader( const QString& path ) const { int r = 0; for ( Device* d : m_devices ) { if ( d && d->deviceNode() == path ) { return std::make_pair( r, d ); } r++; } 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 ) { const auto* model = combo.model(); if ( model->rowCount() < 1 ) { cDebug() << "No items in BootLoaderModel"; return; } if ( path.isEmpty() ) { cDebug() << "No path to restore, choosing default"; combo.setCurrentIndex( 0 ); return; } const BootLoaderModel* bmodel = qobject_cast< const BootLoaderModel* >( model ); int r = bmodel ? bmodel->findBootLoader( path ).first : -1; if ( r >= 0 ) { combo.setCurrentIndex( r ); } else { combo.setCurrentIndex( 0 ); } } } // namespace Calamares calamares-3.2.41.1/src/modules/partition/core/BootLoaderModel.h000066400000000000000000000037721410275732300242710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef BOOTLOADERMODEL_H #define BOOTLOADERMODEL_H #include #include #include class Device; class QComboBox; /** * This model contains one entry for each device MBR plus one entry for the * /boot or / partition */ class BootLoaderModel : public QStandardItemModel { Q_OBJECT public: using DeviceList = QList< Device* >; enum { BootLoaderPathRole = Qt::UserRole + 1, IsPartitionRole }; BootLoaderModel( QObject* parent = nullptr ); ~BootLoaderModel() override; /** * Init the model with the list of devices. Does *not* take ownership of the * devices. */ void init( const DeviceList& devices ); void update(); QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; /** @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; mutable QMutex m_lock; void createMbrItems(); void updateInternal(); }; namespace Calamares { /** @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 * row and sets that as the current row. */ void restoreSelectedBootLoader( QComboBox& combo, const QString& path ); } // namespace Calamares #endif /* BOOTLOADERMODEL_H */ calamares-3.2.41.1/src/modules/partition/core/ColorUtils.cpp000066400000000000000000000126401410275732300237020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" // KPMcore #include #include // Qt #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; using CalamaresUtils::Partition::PartitionIterator; static const int NUM_PARTITION_COLORS = 5; static const int NUM_NEW_PARTITION_COLORS = 4; //Let's try to use the Breeze palette static const QColor PARTITION_COLORS[ NUM_PARTITION_COLORS ] = { "#2980b9", //Dark Plasma Blue "#27ae60", //Dark Icon Green "#c9ce3b", //Dirty Yellow "#3daee9", //Plasma Blue "#9b59b6", //Purple }; static const QColor NEW_PARTITION_COLORS[ NUM_NEW_PARTITION_COLORS ] = { "#c0392b", //Dark Icon Red "#f39c1f", //Dark Icon Yellow "#f1b7bc", //Light Salmon "#fed999", //Light Orange }; static QColor FREE_SPACE_COLOR = "#777777"; static QColor EXTENDED_COLOR = "#aaaaaa"; static QColor UNKNOWN_DISKLABEL_COLOR = "#4d4151"; static QMap< QString, QColor > s_partitionColorsCache; namespace ColorUtils { QColor freeSpaceColor() { return FREE_SPACE_COLOR; } QColor unknownDisklabelColor() { return UNKNOWN_DISKLABEL_COLOR; } PartitionNode* _findRootForPartition( PartitionNode* partition ) { if ( partition->isRoot() || !partition->parent() ) { return partition; } return _findRootForPartition( partition->parent() ); } QColor colorForPartition( Partition* partition ) { if ( !partition ) { cWarning() << "NULL partition"; return FREE_SPACE_COLOR; } if ( isPartitionFreeSpace( partition ) ) { return FREE_SPACE_COLOR; } if ( partition->roles().has( PartitionRole::Extended ) ) { return EXTENDED_COLOR; } if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { if ( partition->fileSystem().type() == FileSystem::Luks ) { FS::luks& luksFs = dynamic_cast< FS::luks& >( partition->fileSystem() ); if ( !luksFs.outerUuid().isEmpty() && s_partitionColorsCache.contains( luksFs.outerUuid() ) ) { return s_partitionColorsCache[ luksFs.outerUuid() ]; } } if ( s_partitionColorsCache.contains( partition->fileSystem().uuid() ) ) { return s_partitionColorsCache[ partition->fileSystem().uuid() ]; } } // No partition-specific color needed, pick one from our list, but skip // free space: we don't want a partition to change colors if space before // it is inserted or removed PartitionNode* parent = _findRootForPartition( partition ); PartitionTable* table = dynamic_cast< PartitionTable* >( parent ); Q_ASSERT( table ); int colorIdx = 0; int newColorIdx = 0; for ( PartitionIterator it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) { Partition* child = *it; if ( child == partition ) { break; } if ( !isPartitionFreeSpace( child ) && !child->hasChildren() ) { if ( isPartitionNew( child ) ) { ++newColorIdx; } ++colorIdx; } } if ( isPartitionNew( partition ) ) { return NEW_PARTITION_COLORS[ newColorIdx % NUM_NEW_PARTITION_COLORS ]; } if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { if ( partition->fileSystem().type() == FileSystem::Luks ) { FS::luks& luksFs = dynamic_cast< FS::luks& >( partition->fileSystem() ); if ( !luksFs.outerUuid().isEmpty() ) { s_partitionColorsCache.insert( luksFs.outerUuid(), PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ] ); } } else s_partitionColorsCache.insert( partition->fileSystem().uuid(), PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ] ); } return PARTITION_COLORS[ colorIdx % NUM_PARTITION_COLORS ]; } QColor colorForPartitionInFreeSpace( Partition* partition ) { PartitionNode* parent = _findRootForPartition( partition ); PartitionTable* table = dynamic_cast< PartitionTable* >( parent ); Q_ASSERT( table ); int newColorIdx = 0; for ( PartitionIterator it = PartitionIterator::begin( table ); it != PartitionIterator::end( table ); ++it ) { Partition* child = *it; if ( child == partition ) { break; } if ( !isPartitionFreeSpace( child ) && !child->hasChildren() && isPartitionNew( child ) ) { ++newColorIdx; } } return NEW_PARTITION_COLORS[ newColorIdx % NUM_NEW_PARTITION_COLORS ]; } void invalidateCache() { s_partitionColorsCache.clear(); } } // namespace ColorUtils calamares-3.2.41.1/src/modules/partition/core/ColorUtils.h000066400000000000000000000023321410275732300233440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef COLORUTILS_H #define COLORUTILS_H class QColor; class Partition; /** * Helper functions to define colors for partitions. It ensures no consecutive * partitions have the same color. */ namespace ColorUtils { QColor freeSpaceColor(); QColor unknownDisklabelColor(); /** * @brief colorForPartition iterates over partitions, caches their colors and returns * a color for the given partition. * @param partition the partition for which to return a color. * @return a color for the partition. */ QColor colorForPartition( Partition* partition ); /** * This is similar to colorForPartition() but returns the color of a partition * which would be created in freeSpacePartition */ QColor colorForPartitionInFreeSpace( Partition* freeSpacePartition ); /** * @brief invalidateCache clears the partition colors cache. */ void invalidateCache(); } // namespace ColorUtils #endif /* COLORUTILS_H */ calamares-3.2.41.1/src/modules/partition/core/DeviceList.cpp000066400000000000000000000125161410275732300236400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "DeviceList.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; namespace PartUtils { /** * Does the given @p device contain the root filesystem? This is true if * the device contains a partition which is currently mounted at / . */ static bool hasRootPartition( Device* device ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( ( *it )->mountPoint() == "/" ) { return true; } return false; } static bool blkIdCheckIso9660( const QString& path ) { QProcess blkid; blkid.start( "blkid", { path } ); blkid.waitForFinished(); QString output = QString::fromLocal8Bit( blkid.readAllStandardOutput() ); return output.contains( "iso9660" ); } static bool isIso9660( const Device* device ) { const QString path = device->deviceNode(); if ( path.isEmpty() ) { return false; } if ( blkIdCheckIso9660( path ) ) { return true; } if ( device->partitionTable() && !device->partitionTable()->children().isEmpty() ) { for ( const Partition* partition : device->partitionTable()->children() ) { if ( blkIdCheckIso9660( partition->partitionPath() ) ) { return true; } } } 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 ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } using DeviceList = QList< Device* >; static inline DeviceList::iterator erase( DeviceList& l, DeviceList::iterator& it ) { Device* p = *it; auto r = l.erase( it ); delete p; return r; } QList< Device* > getDevices( DeviceType which ) { CoreBackend* backend = CoreBackendManager::self()->backend(); #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 << "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 = removeInAllModes( devices, it ); } else if ( isZRam( *it ) ) { cDebug() << Logger::SubEntry << "Removing zram" << 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 = removeInSafeMode( devices, it ); } else if ( writableOnly && isIso9660( *it ) ) { cDebug() << Logger::SubEntry << "Removing device with iso9660 filesystem (probably a CD) on it" << it; it = removeInSafeMode( devices, it ); } else { ++it; } } cDebug() << Logger::SubEntry << "there are" << devices.count() << "devices left."; return devices; } } // namespace PartUtils calamares-3.2.41.1/src/modules/partition/core/DeviceList.h000066400000000000000000000017601410275732300233040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DEVICELIST_H #define DEVICELIST_H #include #include class Device; namespace PartUtils { enum class DeviceType { All, WritableOnly }; /** * @brief Gets a list of storage devices. * @param which Can be used to select from all the devices in * 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). * @return a list of Devices meeting this criterium. */ QList< Device* > getDevices( DeviceType which = DeviceType::All ); } // namespace PartUtils #endif // DEVICELIST_H calamares-3.2.41.1/src/modules/partition/core/DeviceModel.cpp000066400000000000000000000071421410275732300237640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/DeviceModel.h" #include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" // KPMcore #include // KF5 #include #include #include // STL #include static void sortDevices( DeviceModel::DeviceList& l ) { std::sort( l.begin(), l.end(), []( const Device* dev1, const Device* dev2 ) { return dev1->deviceNode() < dev2->deviceNode(); } ); } DeviceModel::DeviceModel( QObject* parent ) : QAbstractListModel( parent ) { } DeviceModel::~DeviceModel() {} void DeviceModel::init( const DeviceList& devices ) { beginResetModel(); m_devices = devices; sortDevices( m_devices ); endResetModel(); } int DeviceModel::rowCount( const QModelIndex& parent ) const { return parent.isValid() ? 0 : m_devices.count(); } QVariant DeviceModel::data( const QModelIndex& index, int role ) const { int row = index.row(); if ( row < 0 || row >= m_devices.count() ) { return QVariant(); } Device* device = m_devices.at( row ); switch ( role ) { case Qt::DisplayRole: case Qt::ToolTipRole: if ( device->name().isEmpty() ) { return device->deviceNode(); } else { if ( device->logicalSize() >= 0 && device->totalLogical() >= 0 ) { //: device[name] - size[number] (device-node[name]) return tr( "%1 - %2 (%3)" ) .arg( device->name() ) .arg( KFormat().formatByteSize( device->capacity() ) ) .arg( device->deviceNode() ); } else { // Newly LVM VGs don't have capacity property yet (i.e. // always has 1B capacity), so don't show it for a while. // //: device[name] - (device-node[name]) return tr( "%1 - (%2)" ).arg( device->name() ).arg( device->deviceNode() ); } } case Qt::DecorationRole: return CalamaresUtils::defaultPixmap( CalamaresUtils::PartitionDisk, CalamaresUtils::Original, QSize( CalamaresUtils::defaultIconSize().width() * 2, CalamaresUtils::defaultIconSize().height() * 2 ) ); default: return QVariant(); } } Device* DeviceModel::deviceForIndex( const QModelIndex& index ) const { int row = index.row(); if ( row < 0 || row >= m_devices.count() ) { return nullptr; } return m_devices.at( row ); } void DeviceModel::swapDevice( Device* oldDevice, Device* newDevice ) { Q_ASSERT( oldDevice ); Q_ASSERT( newDevice ); int indexOfOldDevice = m_devices.indexOf( oldDevice ); if ( indexOfOldDevice < 0 ) { return; } m_devices[ indexOfOldDevice ] = newDevice; Q_EMIT dataChanged( index( indexOfOldDevice ), index( indexOfOldDevice ) ); } void DeviceModel::addDevice( Device* device ) { beginResetModel(); m_devices << device; sortDevices( m_devices ); endResetModel(); } void DeviceModel::removeDevice( Device* device ) { beginResetModel(); m_devices.removeAll( device ); sortDevices( m_devices ); endResetModel(); } calamares-3.2.41.1/src/modules/partition/core/DeviceModel.h000066400000000000000000000024661410275732300234350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef DEVICEMODEL_H #define DEVICEMODEL_H #include #include #include class Device; class PartitionModel; /** * A Qt model which exposes a list of Devices. */ class DeviceModel : public QAbstractListModel { Q_OBJECT public: DeviceModel( QObject* parent = nullptr ); ~DeviceModel() override; using DeviceList = QList< Device* >; /** * Init the model with the list of devices. Does *not* take ownership of the * devices. */ void init( const DeviceList& devices ); int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; Device* deviceForIndex( const QModelIndex& index ) const; void swapDevice( Device* oldDevice, Device* newDevice ); void addDevice( Device* device ); void removeDevice( Device* device ); private: DeviceList m_devices; }; #endif /* DEVICEMODEL_H */ calamares-3.2.41.1/src/modules/partition/core/KPMHelpers.cpp000066400000000000000000000107141410275732300235550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" // KPMcore #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; namespace KPMHelpers { Partition* findPartitionByMountPoint( const QList< Device* >& devices, const QString& mountPoint ) { for ( auto device : devices ) for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( PartitionInfo::mountPoint( *it ) == mountPoint ) { return *it; } return nullptr; } Partition* 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, fs, fs->firstSector(), fs->lastSector(), QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, flags /* activeFlags */, KPM_PARTITION_STATE( New ) ); } Partition* createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, const QString& fsLabel, qint64 firstSector, qint64 lastSector, const QString& passphrase, PartitionTable::Flags flags ) { PartitionRole::Roles newRoles = role.roles(); if ( !role.has( PartitionRole::Luks ) ) { newRoles |= PartitionRole::Luks; } FS::luks* fs = dynamic_cast< FS::luks* >( FileSystemFactory::create( FileSystem::Luks, firstSector, lastSector, device.logicalSize() ) ); if ( !fs ) { cError() << "cannot create LUKS filesystem. Giving up."; return nullptr; } fs->createInnerFileSystem( fsType ); fs->setPassphrase( passphrase ); fs->setLabel( fsLabel ); Partition* p = new Partition( parent, device, PartitionRole( newRoles ), fs, fs->firstSector(), fs->lastSector(), QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, flags /* activeFlags */, KPM_PARTITION_STATE( New ) ); return p; } Partition* clonePartition( Device* device, Partition* partition ) { FileSystem* fs = FileSystemFactory::create( partition->fileSystem().type(), partition->firstSector(), partition->lastSector(), device->logicalSize() ); return new Partition( partition->parent(), *device, partition->roles(), fs, fs->firstSector(), fs->lastSector(), partition->partitionPath(), partition->activeFlags() ); } } // namespace KPMHelpers calamares-3.2.41.1/src/modules/partition/core/KPMHelpers.h000066400000000000000000000051371410275732300232250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef KPMHELPERS_H #define KPMHELPERS_H // KPMcore #include #include // Qt #include #include class Device; class Partition; class PartitionNode; class PartitionRole; #if defined( WITH_KPMCORE4API ) #define KPM_PARTITION_FLAG( x ) PartitionTable::Flag::x #define KPM_PARTITION_STATE( x ) Partition::State::x #define KPM_PARTITION_FLAG_ESP PartitionTable::Flag::Boot #else #define KPM_PARTITION_FLAG( x ) PartitionTable::Flag##x #define KPM_PARTITION_STATE( x ) Partition::State##x #define KPM_PARTITION_FLAG_ESP PartitionTable::FlagEsp #endif /** * Helper functions to manipulate partitions */ namespace KPMHelpers { /** * Iterates on all devices and return the first partition which is associated * with mountPoint. This uses PartitionInfo::mountPoint(), not Partition::mountPoint() */ Partition* findPartitionByMountPoint( const QList< Device* >& devices, const QString& mountPoint ); /** * Helper function to create a new Partition object (does not create anything * on the disk) associated with a FileSystem. */ Partition* createNewPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, const QString& fsLabel, qint64 firstSector, qint64 lastSector, PartitionTable::Flags flags ); Partition* createNewEncryptedPartition( PartitionNode* parent, const Device& device, const PartitionRole& role, FileSystem::Type fsType, const QString& fsLabel, qint64 firstSector, qint64 lastSector, const QString& passphrase, PartitionTable::Flags flags ); Partition* clonePartition( Device* device, Partition* partition ); } // namespace KPMHelpers #endif /* KPMHELPERS_H */ calamares-3.2.41.1/src/modules/partition/core/OsproberEntry.h000066400000000000000000000025641410275732300240710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 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 OSPROBERENTRY_H #define OSPROBERENTRY_H #include struct FstabEntry { QString partitionNode; QString mountPoint; QString fsType; QString options; int dump; int pass; /// Does this entry make sense and is it complete? bool isValid() const; // implemented in Partutils.cpp /** @brief Create an entry from a live of /etc/fstab * * Splits the given string (which ought to follow the format * of /etc/fstab) and returns a corresponding Fstab entry. * If the string isn't valid (e.g. comment-line, or broken * fstab entry) then the entry that is returned is invalid. */ static FstabEntry fromEtcFstab( const QString& ); // implemented in Partutils.cpp }; typedef QList< FstabEntry > FstabEntryList; struct OsproberEntry { QString prettyName; QString path; QString file; QString uuid; bool canBeResized; QStringList line; FstabEntryList fstab; QString homePath; }; typedef QList< OsproberEntry > OsproberEntryList; #endif // OSPROBERENTRY_H calamares-3.2.41.1/src/modules/partition/core/PartUtils.cpp000066400000000000000000000444231410275732300235360ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PartUtils.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/Mount.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/RAII.h" #include #include #include #include #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; namespace PartUtils { QString convenienceName( const Partition* const candidate ) { if ( !candidate->mountPoint().isEmpty() ) { return candidate->mountPoint(); } if ( !candidate->partitionPath().isEmpty() ) { return candidate->partitionPath(); } if ( !candidate->devicePath().isEmpty() ) { return candidate->devicePath(); } if ( !candidate->deviceNode().isEmpty() ) { return candidate->devicePath(); } QString p; QTextStream s( &p ); s << static_cast< const void* >( candidate ); // No good name available, use pointer address return p; } /** @brief Get the globalStorage setting for required space. */ static double getRequiredStorageGiB( bool& ok ) { return Calamares::JobQueue::instance()->globalStorage()->value( "requiredStorageGiB" ).toDouble( &ok ); } bool canBeReplaced( Partition* candidate, const Logger::Once& o ) { if ( !candidate ) { cDebug() << o << "Partition* is NULL"; return false; } cDebug() << o << "Checking if" << convenienceName( candidate ) << "can be replaced."; if ( candidate->isMounted() ) { cDebug() << Logger::SubEntry << "NO, it is mounted."; return false; } bool ok = false; double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { cDebug() << Logger::SubEntry << "NO, requiredStorageGiB is not set correctly."; return false; } qint64 availableStorageB = candidate->capacity(); qint64 requiredStorageB = CalamaresUtils::GiBtoBytes( requiredStorageGiB + 0.5 ); if ( availableStorageB > requiredStorageB ) { cDebug() << o << "Partition" << convenienceName( candidate ) << "authorized for replace install."; return true; } else { Logger::CDebug deb; deb << Logger::SubEntry << "NO, insufficient storage"; deb << Logger::Continuation << "Required storage B:" << requiredStorageB << QString( "(%1GiB)" ).arg( requiredStorageGiB ); deb << Logger::Continuation << "Available storage B:" << availableStorageB << QString( "(%1GiB)" ).arg( CalamaresUtils::BytesToGiB( availableStorageB ) ); return false; } } bool canBeResized( Partition* candidate, const Logger::Once& o ) { if ( !candidate ) { cDebug() << o << "Partition* is NULL"; return false; } cDebug() << o << "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."; return false; } if ( isPartitionFreeSpace( candidate ) ) { cDebug() << Logger::SubEntry << "NO, partition is free space"; return false; } if ( candidate->isMounted() ) { cDebug() << Logger::SubEntry << "NO, partition is mounted"; return false; } if ( candidate->roles().has( PartitionRole::Primary ) ) { PartitionTable* table = dynamic_cast< PartitionTable* >( candidate->parent() ); if ( !table ) { cDebug() << Logger::SubEntry << "NO, no partition table found"; return false; } if ( table->numPrimaries() >= table->maxPrimaries() ) { cDebug() << Logger::SubEntry << "NO, partition table already has" << table->maxPrimaries() << "primary partitions."; return false; } } bool ok = false; double requiredStorageGiB = getRequiredStorageGiB( ok ); if ( !ok ) { cDebug() << Logger::SubEntry << "NO, requiredStorageGiB is not set correctly."; return false; } // We require a little more for partitioning overhead and swap file double advisedStorageGiB = requiredStorageGiB + 0.5 + 2.0; qint64 availableStorageB = candidate->available(); qint64 advisedStorageB = CalamaresUtils::GiBtoBytes( advisedStorageGiB ); if ( availableStorageB > advisedStorageB ) { cDebug() << o << "Partition" << convenienceName( candidate ) << "authorized for resize + autopartition install."; return true; } else { Logger::CDebug deb; deb << Logger::SubEntry << "NO, insufficient storage"; deb << Logger::Continuation << "Required storage B:" << advisedStorageB << QString( "(%1GiB)" ).arg( advisedStorageGiB ); deb << Logger::Continuation << "Available storage B:" << availableStorageB << QString( "(%1GiB)" ).arg( CalamaresUtils::BytesToGiB( availableStorageB ) ) << "for" << convenienceName( candidate ) << "length:" << candidate->length() << "sectorsUsed:" << candidate->sectorsUsed() << "fsType:" << candidate->fileSystem().name(); return false; } } bool canBeResized( DeviceModel* dm, const QString& partitionPath, const Logger::Once& o ) { cDebug() << o << "Checking if" << partitionPath << "can be resized."; QString partitionWithOs = partitionPath; if ( partitionWithOs.startsWith( "/dev/" ) ) { for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); Partition* candidate = CalamaresUtils::Partition::findPartitionByPath( { dev }, partitionWithOs ); if ( candidate ) { return canBeResized( candidate, o ); } } cDebug() << Logger::SubEntry << "no Partition* found for" << partitionWithOs; } cDebug() << Logger::SubEntry << "Partition" << partitionWithOs << "CANNOT BE RESIZED FOR AUTOINSTALL."; return false; } static FstabEntryList lookForFstabEntries( const QString& partitionPath ) { QStringList mountOptions { "ro" }; auto r = CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost, { "blkid", "-s", "TYPE", "-o", "value", partitionPath } ); if ( r.getExitCode() ) { cWarning() << "blkid on" << partitionPath << "failed."; } else { QString fstype = r.getOutput().trimmed(); if ( ( fstype == "ext3" ) || ( fstype == "ext4" ) ) { mountOptions.append( "noload" ); } } cDebug() << "Checking device" << partitionPath << "for fstab (fs=" << r.getOutput() << ')'; FstabEntryList fstabEntries; CalamaresUtils::Partition::TemporaryMount mount( partitionPath, QString(), mountOptions.join( ',' ) ); if ( mount.isValid() ) { 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' ); for ( const QString& rawLine : fstabLines ) { fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) ); } fstabFile.close(); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "lines."; std::remove_if( fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries."; } else { cWarning() << "Could not read fstab from mounted fs"; } } else { cWarning() << "Could not mount existing fs"; } return fstabEntries; } static QString findPartitionPathForMountPoint( const FstabEntryList& fstab, const QString& mountPoint ) { if ( fstab.isEmpty() ) { return QString(); } for ( const FstabEntry& entry : fstab ) { if ( entry.mountPoint == mountPoint ) { QProcess readlink; QString partPath; if ( entry.partitionNode.startsWith( "/dev" ) ) // plain dev node { partPath = entry.partitionNode; } else if ( entry.partitionNode.startsWith( "LABEL=" ) ) { partPath = entry.partitionNode.mid( 6 ); partPath.remove( "\"" ); partPath.replace( "\\040", "\\ " ); partPath.prepend( "/dev/disk/by-label/" ); } else if ( entry.partitionNode.startsWith( "UUID=" ) ) { partPath = entry.partitionNode.mid( 5 ); partPath.remove( "\"" ); partPath = partPath.toLower(); partPath.prepend( "/dev/disk/by-uuid/" ); } else if ( entry.partitionNode.startsWith( "PARTLABEL=" ) ) { partPath = entry.partitionNode.mid( 10 ); partPath.remove( "\"" ); partPath.replace( "\\040", "\\ " ); partPath.prepend( "/dev/disk/by-partlabel/" ); } else if ( entry.partitionNode.startsWith( "PARTUUID=" ) ) { partPath = entry.partitionNode.mid( 9 ); partPath.remove( "\"" ); partPath = partPath.toLower(); partPath.prepend( "/dev/disk/by-partuuid/" ); } // At this point we either have /dev/sda1, or /dev/disk/by-something/... if ( partPath.startsWith( "/dev/disk/by-" ) ) // we got a fancy node { readlink.start( "readlink", { "-en", partPath } ); if ( !readlink.waitForStarted( 1000 ) ) { return QString(); } if ( !readlink.waitForFinished( 1000 ) ) { return QString(); } if ( readlink.exitCode() != 0 || readlink.exitStatus() != QProcess::NormalExit ) { return QString(); } partPath = QString::fromLocal8Bit( readlink.readAllStandardOutput() ).trimmed(); } return partPath; } } return QString(); } OsproberEntryList runOsprober( DeviceModel* dm ) { Logger::Once o; QString osproberOutput; QProcess osprober; osprober.setProgram( "os-prober" ); osprober.setProcessChannelMode( QProcess::SeparateChannels ); osprober.start(); if ( !osprober.waitForStarted() ) { cError() << "os-prober cannot start."; } else if ( !osprober.waitForFinished( 60000 ) ) { cError() << "os-prober timed out."; } else { osproberOutput.append( QString::fromLocal8Bit( osprober.readAllStandardOutput() ).trimmed() ); } QStringList osproberCleanLines; OsproberEntryList osproberEntries; const auto lines = osproberOutput.split( '\n' ); for ( const QString& line : lines ) { if ( !line.simplified().isEmpty() ) { QStringList lineColumns = line.split( ':' ); QString prettyName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) { prettyName = lineColumns.value( 1 ).simplified(); } else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) { prettyName = lineColumns.value( 2 ).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, file, QString(), canBeResized( dm, path, o ), lineColumns, fstabEntries, homePath } ); osproberCleanLines.append( line ); } } if ( osproberCleanLines.count() > 0 ) { cDebug() << o << "os-prober lines after cleanup:" << Logger::DebugList( osproberCleanLines ); } else { cDebug() << o << "os-prober gave no output."; } Calamares::JobQueue::instance()->globalStorage()->insert( "osproberLines", osproberCleanLines ); return osproberEntries; } bool isEfiSystem() { return QDir( "/sys/firmware/efi/efivars" ).exists(); } bool isEfiFilesystemSuitable(const Partition* candidate) { auto type = candidate->fileSystem().type(); auto size = candidate->capacity(); // bytes using CalamaresUtils::Units::operator""_MiB; switch( type ) { case FileSystem::Type::Fat32: if ( size >= 300_MiB ) { return true; } cWarning() << "FAT32 filesystem is too small (" << size << "bytes)"; return false; #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; } } bool isEfiBootable( const Partition* candidate ) { const auto flags = PartitionInfo::flags( candidate ); #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 PartitionTable* table = CalamaresUtils::Partition::getPartitionTable( candidate ); if ( !table ) { cWarning() << "Root of partition table is not a PartitionTable object"; return false; } if ( table->type() == PartitionTable::TableType::gpt ) { const auto bootFlag = KPM_PARTITION_FLAG( Boot ); return flags.testFlag( bootFlag ); } return false; #endif } QString canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ) { cPointerSetter type( fsType ); if ( fsName.isEmpty() ) { type = FileSystem::Ext4; return QStringLiteral( "ext4" ); } QStringList fsLanguage { QLatin1String( "C" ) }; // Required language list to turn off localization if ( ( type = FileSystem::typeForName( fsName, fsLanguage ) ) != FileSystem::Unknown ) { return fsName; } // Second pass: try case-insensitive const auto fstypes = FileSystem::types(); for ( FileSystem::Type t : fstypes ) { if ( 0 == QString::compare( fsName, FileSystem::nameForType( t, fsLanguage ), Qt::CaseInsensitive ) ) { QString fsRealName = FileSystem::nameForType( t, fsLanguage ); if ( fsType ) { *fsType = t; } return fsRealName; } } cWarning() << "Filesystem" << fsName << "not found, using ext4"; // fsType can be used to check whether fsName was a valid filesystem. if ( fsType ) { *fsType = FileSystem::Unknown; } #ifdef DEBUG_FILESYSTEMS // This bit is for distro's debugging their settings, and shows // all the strings that KPMCore is matching against for FS type. { Logger::CDebug d; using TR = Logger::DebugRow< int, QString >; const auto fstypes = FileSystem::types(); d << "Available types (" << fstypes.count() << ')'; for ( FileSystem::Type t : fstypes ) { d << TR( static_cast< int >( t ), FileSystem::nameForType( t, fsLanguage ) ); } } #endif type = FileSystem::Unknown; return QStringLiteral( "ext4" ); } } // namespace PartUtils /* Implementation of methods for FstabEntry, from OsproberEntry.h */ bool FstabEntry::isValid() const { return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty(); } FstabEntry FstabEntry::fromEtcFstab( const QString& rawLine ) { QString line = rawLine.simplified(); if ( line.startsWith( '#' ) ) return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; QStringList splitLine = line.split( ' ' ); if ( splitLine.length() != 6 ) return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; return FstabEntry { splitLine.at( 0 ), // path, or UUID, or LABEL, etc. splitLine.at( 1 ), // mount point splitLine.at( 2 ), // fs type splitLine.at( 3 ), // options splitLine.at( 4 ).toInt(), //dump splitLine.at( 5 ).toInt() //pass }; } calamares-3.2.41.1/src/modules/partition/core/PartUtils.h000066400000000000000000000066221410275732300232020ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTUTILS_H #define PARTUTILS_H #include "OsproberEntry.h" #include "utils/NamedSuffix.h" #include "utils/Units.h" // KPMcore #include // Qt #include class DeviceModel; class Partition; namespace Logger { class Once; } namespace PartUtils { /** * @brief Provides a nice human-readable name for @p candidate * * The most-specific human-readable name for the partition @p candidate * is returned (e.g. device name, or partition path). In the worst * case, a string representation of (void *)candidate is returned. */ 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, 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, 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 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( DeviceModel* dm, const QString& partitionPath, const Logger::Once& o ); /** * @brief runOsprober executes os-prober, parses the output and writes relevant * data to GlobalStorage. * @param dm the DeviceModel instance. * @return a list of os-prober entries, parsed. */ 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) and size (300MiB at least). */ bool isEfiFilesystemSuitable( const Partition* candidate ); /** * @brief Is the given @p partition bootable in EFI? Depending on * the partition table layout, this may mean different flags. */ 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. 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 canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ); } // namespace PartUtils #endif // PARTUTILS_H calamares-3.2.41.1/src/modules/partition/core/PartitionActions.cpp000066400000000000000000000236571410275732300251070ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PartitionActions.h" #include "core/KPMHelpers.h" #include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.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 { qint64 swapSuggestion( const qint64 availableSpaceB, Config::SwapChoice swap ) { if ( ( swap != Config::SwapChoice::SmallSwap ) && ( swap != Config::SwapChoice::FullSwap ) ) { return 0; } // See partition.conf for explanation qint64 suggestedSwapSizeB = 0; auto memory = CalamaresUtils::System::instance()->getTotalMemoryB(); qint64 availableRamB = memory.first; qreal overestimationFactor = memory.second; bool ensureSuspendToDisk = swap == Config::SwapChoice::FullSwap; // Ramp up quickly to 8GiB, then follow memory size if ( availableRamB <= 4_GiB ) { suggestedSwapSizeB = availableRamB * 2; } else if ( availableRamB <= 8_GiB ) { suggestedSwapSizeB = 8_GiB; } else { suggestedSwapSizeB = availableRamB; } // .. top out at 8GiB if we don't care about suspend if ( !ensureSuspendToDisk ) { suggestedSwapSizeB = qMin( 8_GiB, suggestedSwapSizeB ); } // Allow for a fudge factor suggestedSwapSizeB *= overestimationFactor; // don't use more than 10% of available space if ( !ensureSuspendToDisk ) { suggestedSwapSizeB = qMin( suggestedSwapSizeB, qint64( 0.10 * availableSpaceB ) ); } cDebug() << "Suggested swap size:" << suggestedSwapSizeB / 1024. / 1024. / 1024. << "GiB"; return suggestedSwapSizeB; } void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions o ) { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); bool isEfi = PartUtils::isEfiSystem(); // Partition sizes are expressed in MiB, should be multiples of // the logical sector size (usually 512B). EFI starts with 2MiB // 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; // 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->initLayout( type == FileSystem::Unknown ? FileSystem::Ext4 : type ); core->createPartitionTable( dev, partType ); if ( isEfi ) { int uefisys_part_sizeB = 300_MiB; if ( gs->contains( "efiSystemPartitionSize" ) ) { CalamaresUtils::Partition::PartitionSize part_size = CalamaresUtils::Partition::PartitionSize( gs->value( "efiSystemPartitionSize" ).toString() ); uefisys_part_sizeB = part_size.toBytes( dev->capacity() ); } qint64 efiSectorCount = CalamaresUtils::bytesToSectors( uefisys_part_sizeB, dev->logicalSize() ); Q_ASSERT( efiSectorCount > 0 ); // Since sectors count from 0, and this partition is created starting // at firstFreeSector, we need efiSectorCount sectors, numbered // firstFreeSector..firstFreeSector+efiSectorCount-1. qint64 lastSector = firstFreeSector + efiSectorCount - 1; 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; } const bool mayCreateSwap = ( o.swap == Config::SwapChoice::SmallSwap ) || ( o.swap == Config::SwapChoice::FullSwap ); bool shouldCreateSwap = false; qint64 suggestedSwapSizeB = 0; if ( mayCreateSwap ) { qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize(); suggestedSwapSizeB = swapSuggestion( availableSpaceB, o.swap ); // Space required by this installation is what the distro claims is needed // (via global configuration) plus the swap size plus a fudge factor of // 0.6GiB (this was 2.1GiB up to Calamares 3.2.2). qint64 requiredSpaceB = o.requiredSpaceB + 600_MiB + suggestedSwapSizeB; // If there is enough room for ESP + root + swap, create swap, otherwise don't. shouldCreateSwap = availableSpaceB > requiredSpaceB; } qint64 lastSectorForRoot = dev->totalLogical() - 1; //last sector of the device if ( shouldCreateSwap ) { lastSectorForRoot -= suggestedSwapSizeB / dev->logicalSize() + 1; } core->layoutApply( dev, firstFreeSector, lastSectorForRoot, o.luksPassphrase ); if ( shouldCreateSwap ) { Partition* swapPartition = nullptr; if ( o.luksPassphrase.isEmpty() ) { swapPartition = KPMHelpers::createNewPartition( dev->partitionTable(), *dev, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, QStringLiteral( "swap" ), lastSectorForRoot + 1, dev->totalLogical() - 1, KPM_PARTITION_FLAG( None ) ); } else { swapPartition = KPMHelpers::createNewEncryptedPartition( dev->partitionTable(), *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 ); } core->dumpQueue(); } void doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition, Choices::ReplacePartitionOptions o ) { qint64 firstSector, lastSector; cDebug() << "doReplacePartition for device" << partition->partitionPath(); PartitionRole newRoles( partition->roles() ); if ( partition->roles().has( PartitionRole::Extended ) ) { newRoles = PartitionRole( PartitionRole::Primary ); } if ( partition->roles().has( PartitionRole::Unallocated ) ) { newRoles = PartitionRole( PartitionRole::Primary ); cWarning() << "selected partition is free space"; if ( partition->parent() ) { Partition* parent = dynamic_cast< Partition* >( partition->parent() ); if ( parent && parent->roles().has( PartitionRole::Extended ) ) { newRoles = PartitionRole( PartitionRole::Logical ); } } } // Save the first and last sector values as the partition will be deleted firstSector = partition->firstSector(); lastSector = partition->lastSector(); if ( !partition->roles().has( PartitionRole::Unallocated ) ) { core->deletePartition( dev, partition ); } core->layoutApply( dev, firstSector, lastSector, o.luksPassphrase ); core->dumpQueue(); } } // namespace PartitionActions calamares-3.2.41.1/src/modules/partition/core/PartitionActions.h000066400000000000000000000053211410275732300245400ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONACTIONS_H #define PARTITIONACTIONS_H #include "Config.h" #include #include class PartitionCoreModule; class Device; class Partition; namespace PartitionActions { /** @brief Namespace for enums * * This namespace houses non-class enums..... */ namespace Choices { struct ReplacePartitionOptions { QString defaultPartitionTableType; // e.g. "gpt" or "msdos" QString defaultFsType; // e.g. "ext4" or "btrfs" QString luksPassphrase; // optional ReplacePartitionOptions( const QString& pt, const QString& fs, const QString& luks ) : defaultPartitionTableType( pt ) , defaultFsType( fs ) , luksPassphrase( luks ) { } }; struct AutoPartitionOptions : ReplacePartitionOptions { QString efiPartitionMountPoint; // optional, e.g. "/boot" quint64 requiredSpaceB; // estimated required space for root partition Config::SwapChoice swap; AutoPartitionOptions( const QString& pt, const QString& fs, const QString& luks, const QString& efi, qint64 requiredBytes, Config::SwapChoice s ) : ReplacePartitionOptions( pt, fs, luks ) , efiPartitionMountPoint( efi ) , requiredSpaceB( requiredBytes > 0 ? static_cast< quint64 >( requiredBytes ) : 0 ) , swap( s ) { } }; } // namespace Choices /** * @brief doAutopartition sets up an autopartitioning operation on the given Device. * @param core a pointer to the PartitionCoreModule instance. * @param dev the device to wipe. * @param options settings for autopartitioning. */ void doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionOptions options ); /** * @brief doReplacePartition sets up replace-partitioning with the given partition. * @param core a pointer to the PartitionCoreModule instance. * @param dev a pointer to the Device on which to replace a partition. * @param partition a pointer to the Partition to be replaced. * @param options settings for partitioning (not all fields apply) * * @note this function also takes care of requesting PCM to delete the partition. */ void doReplacePartition( PartitionCoreModule* core, Device* dev, Partition* partition, Choices::ReplacePartitionOptions options ); } // namespace PartitionActions #endif // PARTITIONACTIONS_H calamares-3.2.41.1/src/modules/partition/core/PartitionCoreModule.cpp000066400000000000000000000764221410275732300255430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/PartitionCoreModule.h" #include "core/BootLoaderModel.h" #include "core/ColorUtils.h" #include "core/DeviceList.h" #include "core/DeviceModel.h" #include "core/KPMHelpers.h" #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" #include "jobs/CreatePartitionTableJob.h" #include "jobs/CreateVolumeGroupJob.h" #include "jobs/DeactivateVolumeGroupJob.h" #include "jobs/DeletePartitionJob.h" #include "jobs/FillGlobalStorageJob.h" #include "jobs/FormatPartitionJob.h" #include "jobs/RemoveVolumeGroupJob.h" #include "jobs/ResizePartitionJob.h" #include "jobs/ResizeVolumeGroupJob.h" #include "jobs/SetPartitionFlagsJob.h" #ifdef DEBUG_PARTITION_LAME #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 #include #include #include #include #include #include #include #include #include // Qt #include #include #include #include #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; using CalamaresUtils::Partition::PartitionIterator; PartitionCoreModule::RefreshHelper::RefreshHelper( PartitionCoreModule* module ) : m_module( module ) { } PartitionCoreModule::RefreshHelper::~RefreshHelper() { m_module->refreshAfterModelChange(); } class OperationHelper { public: OperationHelper( PartitionModel* model, PartitionCoreModule* core ) : m_coreHelper( core ) , m_modelHelper( model ) { } OperationHelper( const OperationHelper& ) = delete; OperationHelper& operator=( const OperationHelper& ) = delete; private: // Keep these in order: first the model needs to finish, // then refresh is called. Remember that destructors are // called in *reverse* order of declaration in this class. PartitionCoreModule::RefreshHelper m_coreHelper; PartitionModel::ResetHelper m_modelHelper; }; //- 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 ) , immutableDevice( new Device( *_device ) ) , isAvailable( true ) { } PartitionCoreModule::DeviceInfo::~DeviceInfo() {} void PartitionCoreModule::DeviceInfo::forgetChanges() { m_jobs.clear(); for ( auto it = PartitionIterator::begin( device.data() ); it != PartitionIterator::end( device.data() ); ++it ) { PartitionInfo::reset( *it ); } partitionModel->revert(); } bool PartitionCoreModule::DeviceInfo::isDirty() const { 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; } //- PartitionCoreModule ------------------------------------ PartitionCoreModule::PartitionCoreModule( QObject* parent ) : QObject( parent ) , m_deviceModel( new DeviceModel( this ) ) , m_bootLoaderModel( new BootLoaderModel( this ) ) { if ( !m_kpmcore ) { qFatal( "Failed to initialize KPMcore backend" ); } } void PartitionCoreModule::init() { QMutexLocker locker( &m_revertMutex ); doInit(); } void PartitionCoreModule::doInit() { FileSystemFactory::init(); using DeviceList = QList< Device* >; DeviceList devices = PartUtils::getDevices( PartUtils::DeviceType::WritableOnly ); cDebug() << "LIST OF DETECTED DEVICES:"; cDebug() << Logger::SubEntry << "node\tcapacity\tname\tprettyName"; for ( auto device : devices ) { cDebug() << Logger::SubEntry << Logger::Pointer( device ); 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() << device->name() << 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->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 // change. // It is a known fact that /dev/sda1-style device paths aren't persistent // across reboots (and this doesn't affect us), but partition numbers can also // change at runtime against our will just for shits and giggles. // But why would that ever happen? What system could possibly be so poorly // designed that it requires a partition path rearrangement at runtime? // Logical partitions on an MSDOS disklabel of course. // See DeletePartitionJob::updatePreview. for ( auto deviceInfo : m_deviceInfos ) { for ( auto it = PartitionIterator::begin( deviceInfo->device.data() ); it != PartitionIterator::end( deviceInfo->device.data() ); ++it ) { Partition* partition = *it; for ( auto jt = m_osproberLines.begin(); jt != m_osproberLines.end(); ++jt ) { if ( jt->path == partition->partitionPath() && partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() ) { jt->uuid = partition->fileSystem().uuid(); } } } } for ( auto deviceInfo : m_deviceInfos ) { deviceInfo->partitionModel->init( deviceInfo->device.data(), m_osproberLines ); } DeviceList bootLoaderDevices; for ( DeviceList::Iterator it = devices.begin(); it != devices.end(); ++it ) if ( ( *it )->type() != Device::Type::Disk_Device ) { cDebug() << "Ignoring device that is not Disk_Device to bootLoaderDevices list."; continue; } else { bootLoaderDevices.append( *it ); } m_bootLoaderModel->init( bootLoaderDevices ); scanForLVMPVs(); //FIXME: this should be removed in favor of // proper KPM support for EFI if ( PartUtils::isEfiSystem() ) { scanForEfiSystemPartitions(); } } PartitionCoreModule::~PartitionCoreModule() { qDeleteAll( m_deviceInfos ); } DeviceModel* PartitionCoreModule::deviceModel() const { return m_deviceModel; } BootLoaderModel* PartitionCoreModule::bootLoaderModel() const { return m_bootLoaderModel; } PartitionModel* PartitionCoreModule::partitionModelForDevice( const Device* device ) const { DeviceInfo* info = infoForDevice( device ); Q_ASSERT( info ); return info->partitionModel.data(); } Device* PartitionCoreModule::immutableDeviceCopy( const Device* device ) { Q_ASSERT( device ); DeviceInfo* info = infoForDevice( device ); if ( !info ) { return nullptr; } return info->immutableDevice.data(); } void PartitionCoreModule::createPartitionTable( Device* device, PartitionTable::TableType type ) { auto* deviceInfo = infoForDevice( device ); if ( deviceInfo ) { // Creating a partition table wipes all the disk, so there is no need to // keep previous changes deviceInfo->forgetChanges(); OperationHelper helper( partitionModelForDevice( device ), this ); deviceInfo->makeJob< CreatePartitionTableJob >( type ); } } void PartitionCoreModule::createPartition( Device* device, Partition* partition, PartitionTable::Flags flags ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); deviceInfo->makeJob< CreatePartitionJob >( partition ); if ( flags != KPM_PARTITION_FLAG( None ) ) { deviceInfo->makeJob< SetPartFlagsJob >( partition, flags ); PartitionInfo::setFlags( partition, flags ); } } void PartitionCoreModule::createVolumeGroup( QString& vgName, QVector< const Partition* > pvList, qint32 peSize ) { // Appending '_' character in case of repeated VG name while ( hasVGwithThisName( vgName ) ) { vgName.append( '_' ); } 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->makeJob< CreateVolumeGroupJob >( vgName, pvList, peSize ); refreshAfterModelChange(); } void PartitionCoreModule::resizeVolumeGroup( LvmDevice* device, QVector< const Partition* >& pvList ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); deviceInfo->makeJob< ResizeVolumeGroupJob >( device, pvList ); refreshAfterModelChange(); } void PartitionCoreModule::deactivateVolumeGroup( LvmDevice* 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 job->exec(); refreshAfterModelChange(); } void PartitionCoreModule::removeVolumeGroup( LvmDevice* device ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); deviceInfo->makeJob< RemoveVolumeGroupJob >( device ); refreshAfterModelChange(); } void PartitionCoreModule::deletePartition( Device* device, Partition* partition ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); if ( partition->roles().has( PartitionRole::Extended ) ) { // Delete all logical partitions first // I am not sure if we can iterate on Partition::children() while // deleting them, so let's play it safe and keep our own list. QList< Partition* > lst; for ( auto childPartition : partition->children() ) if ( !isPartitionFreeSpace( childPartition ) ) { lst << childPartition; } for ( auto childPartition : lst ) { deletePartition( device, childPartition ); } } if ( partition->state() == KPM_PARTITION_STATE( New ) ) { // Take all the SetPartFlagsJob from the list and delete them do { auto job_ptr = deviceInfo->takeJob< SetPartFlagsJob >( partition ); if ( job_ptr.data() ) { continue; } } while ( false ); // Find matching CreatePartitionJob auto job_ptr = deviceInfo->takeJob< CreatePartitionJob >( partition ); if ( !job_ptr.data() ) { cDebug() << "Failed to find a CreatePartitionJob matching the partition to remove"; return; } // Remove it if ( !partition->parent()->remove( partition ) ) { cDebug() << "Failed to remove partition from preview"; return; } device->partitionTable()->updateUnallocated( *device ); // The partition is no longer referenced by either a job or the device // partition list, so we have to delete it delete partition; } else { // Remove any PartitionJob on this partition do { auto job_ptr = deviceInfo->takeJob< PartitionJob >( partition ); if ( job_ptr.data() ) { continue; } } while ( false ); deviceInfo->makeJob< DeletePartitionJob >( partition ); } } void PartitionCoreModule::formatPartition( Device* device, Partition* partition ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); deviceInfo->makeJob< FormatPartitionJob >( partition ); } 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 ); Q_ASSERT( deviceInfo ); OperationHelper helper( partitionModelForDevice( device ), this ); deviceInfo->makeJob< ResizePartitionJob >( partition, first, last ); } void PartitionCoreModule::setPartitionFlags( Device* device, Partition* partition, PartitionTable::Flags flags ) { auto* deviceInfo = infoForDevice( device ); Q_ASSERT( deviceInfo ); OperationHelper( partitionModelForDevice( device ), this ); deviceInfo->makeJob< SetPartFlagsJob >( partition, flags ); PartitionInfo::setFlags( partition, flags ); } Calamares::JobList PartitionCoreModule::jobs( const Config* config ) const { Calamares::JobList lst; QList< Device* > devices; #ifdef DEBUG_PARTITION_UNSAFE #ifdef DEBUG_PARTITION_LAME cDebug() << "Unsafe partitioning is enabled."; cDebug() << Logger::SubEntry << "it has been lamed, and will fail."; lst << Calamares::job_ptr( new Calamares::FailJob( QStringLiteral( "Partition" ) ) ); #else cWarning() << "Unsafe partitioning is enabled."; cWarning() << Logger::SubEntry << "the unsafe actions will be executed."; #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 ) { if ( info->isDirty() ) { lst << Calamares::job_ptr( new ClearMountsJob( info->device.data() ) ); } } for ( auto info : m_deviceInfos ) { lst << info->jobs(); devices << info->device.data(); } lst << Calamares::job_ptr( new FillGlobalStorageJob( config, devices, m_bootLoaderInstallPath ) ); lst << automountControl; return lst; } bool PartitionCoreModule::hasRootMountPoint() const { return m_hasRootMountPoint; } QList< Partition* > PartitionCoreModule::efiSystemPartitions() const { return m_efiSystemPartitions; } QVector< const Partition* > PartitionCoreModule::lvmPVs() const { return m_lvmPVs; } bool PartitionCoreModule::hasVGwithThisName( const QString& name ) const { 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(); } bool PartitionCoreModule::isInVG( const Partition* partition ) const { auto condition = [partition]( DeviceInfo* d ) { LvmDevice* vg = dynamic_cast< LvmDevice* >( d->device.data() ); return vg && vg->physicalVolumes().contains( partition ); }; return std::find_if( m_deviceInfos.begin(), m_deviceInfos.end(), condition ) != m_deviceInfos.end(); } void PartitionCoreModule::dumpQueue() const { cDebug() << "# Queue:"; for ( auto info : m_deviceInfos ) { cDebug() << Logger::SubEntry << "## Device:" << info->device->name(); for ( const auto& job : info->jobs() ) { cDebug() << Logger::SubEntry << "-" << job->prettyName(); } } } const OsproberEntryList PartitionCoreModule::osproberEntries() const { return m_osproberLines; } void PartitionCoreModule::refreshPartition( Device* device, Partition* ) { // Keep it simple for now: reset the model. This can be improved to cause // 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 ); OperationHelper helper( model, this ); } void PartitionCoreModule::refreshAfterModelChange() { updateHasRootMountPoint(); updateIsDirty(); m_bootLoaderModel->update(); scanForLVMPVs(); //FIXME: this should be removed in favor of // proper KPM support for EFI if ( PartUtils::isEfiSystem() ) { scanForEfiSystemPartitions(); } } void PartitionCoreModule::updateHasRootMountPoint() { bool oldValue = m_hasRootMountPoint; m_hasRootMountPoint = findPartitionByMountPoint( "/" ); if ( oldValue != m_hasRootMountPoint ) { hasRootMountPointChanged( m_hasRootMountPoint ); } } void PartitionCoreModule::updateIsDirty() { bool oldValue = m_isDirty; m_isDirty = false; for ( auto info : m_deviceInfos ) if ( info->isDirty() ) { m_isDirty = true; break; } if ( oldValue != m_isDirty ) { isDirtyChanged( m_isDirty ); } } void PartitionCoreModule::scanForEfiSystemPartitions() { const bool wasEmpty = m_efiSystemPartitions.isEmpty(); m_efiSystemPartitions.clear(); QList< Device* > devices; for ( int row = 0; row < deviceModel()->rowCount(); ++row ) { Device* device = deviceModel()->deviceForIndex( deviceModel()->index( row ) ); devices.append( device ); } QList< Partition* > efiSystemPartitions = CalamaresUtils::Partition::findPartitions( devices, PartUtils::isEfiBootable ); if ( efiSystemPartitions.isEmpty() ) { 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; } void PartitionCoreModule::scanForLVMPVs() { m_lvmPVs.clear(); QList< Device* > physicalDevices; QList< LvmDevice* > vgDevices; for ( DeviceInfo* deviceInfo : m_deviceInfos ) { if ( deviceInfo->device.data()->type() == Device::Type::Disk_Device ) { physicalDevices << deviceInfo->device.data(); } else if ( deviceInfo->device.data()->type() == Device::Type::LVM_Device ) { LvmDevice* device = dynamic_cast< LvmDevice* >( deviceInfo->device.data() ); // Restoring physical volume list device->physicalVolumes().clear(); vgDevices << device; } } #if defined( WITH_KPMCORE4API ) VolumeManagerDevice::scanDevices( physicalDevices ); for ( auto p : LVM::pvList::list() ) #else LvmDevice::scanSystemLVM( physicalDevices ); for ( auto p : LVM::pvList ) #endif { m_lvmPVs << p.partition().data(); for ( LvmDevice* device : vgDevices ) if ( p.vgName() == device->name() ) { // Adding scanned VG to PV list device->physicalVolumes() << p.partition(); break; } } for ( DeviceInfo* d : m_deviceInfos ) { for ( const auto& job : d->jobs() ) { // Including new LVM PVs CreatePartitionJob* partJob = dynamic_cast< CreatePartitionJob* >( job.data() ); if ( partJob ) { Partition* p = partJob->partition(); if ( p->fileSystem().type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } else if ( p->fileSystem().type() == FileSystem::Type::Luks ) { // Encrypted LVM PVs FileSystem* innerFS = static_cast< const FS::luks* >( &p->fileSystem() )->innerFS(); if ( innerFS && innerFS->type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } } #if defined( WITH_KPMCORE4API ) else if ( p->fileSystem().type() == FileSystem::Type::Luks2 ) { // Encrypted LVM PVs FileSystem* innerFS = static_cast< const FS::luks* >( &p->fileSystem() )->innerFS(); if ( innerFS && innerFS->type() == FileSystem::Type::Lvm2_PV ) { m_lvmPVs << p; } } #endif } } } } PartitionCoreModule::DeviceInfo* PartitionCoreModule::infoForDevice( const Device* device ) const { for ( auto it = m_deviceInfos.constBegin(); it != m_deviceInfos.constEnd(); ++it ) { if ( ( *it )->device.data() == device ) { return *it; } if ( ( *it )->immutableDevice.data() == device ) { return *it; } } return nullptr; } Partition* PartitionCoreModule::findPartitionByMountPoint( const QString& mountPoint ) const { for ( auto deviceInfo : m_deviceInfos ) { Device* device = deviceInfo->device.data(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) if ( PartitionInfo::mountPoint( *it ) == mountPoint ) { return *it; } } return nullptr; } void PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) { cDebug() << "PCM::setBootLoaderInstallPath" << path; m_bootLoaderInstallPath = path; } void PartitionCoreModule::initLayout( FileSystem::Type defaultFsType, const QVariantList& config ) { m_partLayout.init( defaultFsType, config ); } void PartitionCoreModule::layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ) { bool isEfi = PartUtils::isEfiSystem(); 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. // // 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; }; const bool separate_boot_partition = std::find_if( partList.constBegin(), partList.constEnd(), is_boot ) != partList.constEnd(); for ( Partition* part : partList ) { if ( is_boot( part ) ) { part->setLabel( "boot" ); } if ( is_root( part ) ) { part->setLabel( "root" ); } if ( ( separate_boot_partition && is_boot( part ) ) || ( !separate_boot_partition && is_root( part ) ) ) { createPartition( dev, part, part->activeFlags() | ( isEfi ? KPM_PARTITION_FLAG( None ) : KPM_PARTITION_FLAG( Boot ) ) ); } else { createPartition( dev, part ); } } } void PartitionCoreModule::layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ) { layoutApply( dev, firstSector, lastSector, luksPassphrase, dev->partitionTable(), PartitionRole( PartitionRole::Primary ) ); } void PartitionCoreModule::revert() { QMutexLocker locker( &m_revertMutex ); qDeleteAll( m_deviceInfos ); m_deviceInfos.clear(); doInit(); updateIsDirty(); Q_EMIT reverted(); } void PartitionCoreModule::revertAllDevices() { for ( auto it = m_deviceInfos.begin(); it != m_deviceInfos.end(); ) { // In new VGs device info, there will be always a CreateVolumeGroupJob as the first job in jobs list if ( dynamic_cast< LvmDevice* >( ( *it )->device.data() ) ) { ( *it )->isAvailable = true; if ( !( *it )->jobs().empty() ) { CreateVolumeGroupJob* vgJob = dynamic_cast< CreateVolumeGroupJob* >( ( *it )->jobs().first().data() ); if ( vgJob ) { vgJob->undoPreview(); ( *it )->forgetChanges(); m_deviceModel->removeDevice( ( *it )->device.data() ); it = m_deviceInfos.erase( it ); continue; } } } revertDevice( ( *it )->device.data(), false ); ++it; } refreshAfterModelChange(); } void PartitionCoreModule::revertDevice( Device* dev, bool individualRevert ) { QMutexLocker locker( &m_revertMutex ); DeviceInfo* devInfo = infoForDevice( dev ); if ( !devInfo ) { return; } devInfo->forgetChanges(); CoreBackend* backend = CoreBackendManager::self()->backend(); Device* newDev = backend->scanDevice( devInfo->device->deviceNode() ); devInfo->device.reset( newDev ); devInfo->partitionModel->init( newDev, m_osproberLines ); m_deviceModel->swapDevice( dev, newDev ); QList< Device* > devices; for ( DeviceInfo* const info : m_deviceInfos ) { if ( info && !info->device.isNull() && info->device->type() == Device::Type::Disk_Device ) { devices.append( info->device.data() ); } } m_bootLoaderModel->init( devices ); if ( individualRevert ) { refreshAfterModelChange(); } Q_EMIT deviceReverted( newDev ); } 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(); } ); QFuture< void > future = QtConcurrent::run( this, &PartitionCoreModule::revertDevice, dev, true ); watcher->setFuture( future ); } void PartitionCoreModule::clearJobs() { foreach ( DeviceInfo* deviceInfo, m_deviceInfos ) { deviceInfo->forgetChanges(); } updateIsDirty(); } bool PartitionCoreModule::isDirty() { return m_isDirty; } bool PartitionCoreModule::isVGdeactivated( LvmDevice* device ) { for ( DeviceInfo* deviceInfo : m_deviceInfos ) if ( device == deviceInfo->device.data() && !deviceInfo->isAvailable ) { return true; } return false; } QList< PartitionCoreModule::SummaryInfo > PartitionCoreModule::createSummaryInfo() const { QList< SummaryInfo > lst; for ( auto deviceInfo : m_deviceInfos ) { if ( !deviceInfo->isDirty() ) { continue; } SummaryInfo summaryInfo; summaryInfo.deviceName = deviceInfo->device->name(); summaryInfo.deviceNode = deviceInfo->device->deviceNode(); Device* deviceBefore = deviceInfo->immutableDevice.data(); summaryInfo.partitionModelBefore = new PartitionModel; summaryInfo.partitionModelBefore->init( deviceBefore, m_osproberLines ); // Make deviceBefore a child of partitionModelBefore so that it is not // leaked (as long as partitionModelBefore is deleted) deviceBefore->setParent( summaryInfo.partitionModelBefore ); summaryInfo.partitionModelAfter = new PartitionModel; summaryInfo.partitionModelAfter->init( deviceInfo->device.data(), m_osproberLines ); lst << summaryInfo; } return lst; } calamares-3.2.41.1/src/modules/partition/core/PartitionCoreModule.h000066400000000000000000000213431410275732300252000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONCOREMODULE_H #define PARTITIONCOREMODULE_H #include "core/KPMHelpers.h" #include "core/PartitionLayout.h" #include "core/PartitionModel.h" #include "jobs/PartitionJob.h" #include "Job.h" #include "partition/KPMManager.h" // KPMcore #include #include // Qt #include #include #include #include class BootLoaderModel; class Config; class CreatePartitionJob; class Device; class DeviceModel; class FileSystem; class Partition; class QStandardItemModel; /** * The core of the module. * * It has two responsibilities: * - Listing the devices and partitions, creating Qt models for them. * - Creating jobs for any changes requested by the user interface. */ class PartitionCoreModule : public QObject { Q_OBJECT public: /** * This helper class calls refresh() on the module * on destruction (nothing else). It is used as * part of the model-consistency objects, along with * PartitionModel::ResetHelper. */ class RefreshHelper { public: RefreshHelper( PartitionCoreModule* module ); ~RefreshHelper(); RefreshHelper( const RefreshHelper& ) = delete; RefreshHelper& operator=( const RefreshHelper& ) = delete; private: PartitionCoreModule* m_module; }; /** * @brief The SummaryInfo struct is a wrapper for PartitionModel instances for * a given Device. * Each Device gets a mutable "after" model and an immutable "before" model. */ struct SummaryInfo { QString deviceName; QString deviceNode; PartitionModel* partitionModelBefore; PartitionModel* partitionModelAfter; }; PartitionCoreModule( QObject* parent = nullptr ); ~PartitionCoreModule() override; /** * @brief init performs a devices scan and initializes all KPMcore data * structures. * This function is thread safe. */ void init(); /** * @brief deviceModel returns a model which exposes a list of available * storage devices. * @return the device model. */ DeviceModel* deviceModel() const; /** * @brief partitionModelForDevice returns the PartitionModel for the given device. * @param device the device for which to get a model. * @return a PartitionModel which represents the partitions of a device. */ PartitionModel* partitionModelForDevice( const Device* device ) const; //HACK: all devices change over time, and together make up the state of the CoreModule. // However this makes it hard to show the *original* state of a device. // For each DeviceInfo we keep a second Device object that contains the // current state of a disk regardless of subsequent changes. // -- Teo 4/2015 //FIXME: make this horrible method private. -- Teo 12/2015 Device* immutableDeviceCopy( const Device* device ); /** * @brief bootLoaderModel returns a model which represents the available boot * loader locations. * The single BootLoaderModel instance belongs to the PCM. * @return the BootLoaderModel. */ BootLoaderModel* bootLoaderModel() const; void createPartitionTable( Device* device, PartitionTable::TableType type ); /** * @brief Add a job to do the actual partition-creation. * * If @p flags is not FlagNone, then the given flags are * applied to the newly-created partition. */ void createPartition( Device* device, Partition* partition, PartitionTable::Flags flags = KPM_PARTITION_FLAG( None ) ); void createVolumeGroup( QString& vgName, QVector< const Partition* > pvList, qint32 peSize ); void resizeVolumeGroup( LvmDevice* device, QVector< const Partition* >& pvList ); void deactivateVolumeGroup( LvmDevice* device ); void removeVolumeGroup( LvmDevice* device ); void deletePartition( Device* device, Partition* partition ); 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 ); /// @brief Retrieve the path where the bootloader will be installed QString bootLoaderInstallPath() const { return m_bootLoaderInstallPath; } /// @brief Set the path where the bootloader will be installed void setBootLoaderInstallPath( const QString& path ); /** @brief Initialize the default layout that will be applied * * See PartitionLayout::init() */ void initLayout( FileSystem::Type defaultFsType, const QVariantList& config = QVariantList() ); void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); void layoutApply( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); /** * @brief jobs creates and returns a list of jobs which can then apply the changes * requested by the user. * @return a list of jobs. */ Calamares::JobList jobs( const Config* ) const; bool hasRootMountPoint() const; QList< Partition* > efiSystemPartitions() const; QVector< const Partition* > lvmPVs() const; bool hasVGwithThisName( const QString& name ) const; bool isInVG( const Partition* partition ) const; /** * @brief findPartitionByMountPoint returns a Partition* for a given mount point. * @param mountPoint the mount point to find a partition for. * @return a pointer to a Partition object. * Note that this function looks for partitions in live devices (the "proposed" * state), not the immutable copies. Comparisons with Partition* objects that * refer to immutable Device*s will fail. */ Partition* findPartitionByMountPoint( const QString& mountPoint ) const; void revert(); // full revert, thread safe, calls doInit void revertAllDevices(); // convenience function, calls revertDevice /** @brief rescans a single Device and updates DeviceInfo * * When @p individualRevert is true, calls refreshAfterModelChange(), * used to reduce number of refreshes when calling revertAllDevices(). */ void revertDevice( Device* dev, bool individualRevert = true ); void asyncRevertDevice( Device* dev, std::function< void() > callback ); //like revertDevice, but asynchronous void clearJobs(); // only clear jobs, the Device* states are preserved bool isDirty(); // true if there are pending changes, otherwise false bool isVGdeactivated( LvmDevice* device ); /** * To be called when a partition has been altered, but only for changes * which do not affect its size, because changes which affect the partition size * affect the size of other partitions as well. */ void refreshPartition( Device* device, Partition* partition ); /** * Returns a list of SummaryInfo for devices which have pending changes. * Caller is responsible for deleting the partition models */ QList< SummaryInfo > createSummaryInfo() const; const OsproberEntryList osproberEntries() const; // os-prober data structure, cached void dumpQueue() const; // debug output Q_SIGNALS: void hasRootMountPointChanged( bool value ); void isDirtyChanged( bool value ); void reverted(); void deviceReverted( Device* device ); private: struct DeviceInfo; void refreshAfterModelChange(); void doInit(); void updateHasRootMountPoint(); void updateIsDirty(); void scanForEfiSystemPartitions(); void scanForLVMPVs(); 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; }; #endif /* PARTITIONCOREMODULE_H */ calamares-3.2.41.1/src/modules/partition/core/PartitionInfo.cpp000066400000000000000000000046321410275732300243720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/PartitionInfo.h" // KPMcore #include #include // Qt #include namespace PartitionInfo { static const char MOUNT_POINT_PROPERTY[] = "_calamares_mountPoint"; static const char FORMAT_PROPERTY[] = "_calamares_format"; static const char FLAGS_PROPERTY[] = "_calamares_flags"; QString mountPoint( Partition* partition ) { return partition->property( MOUNT_POINT_PROPERTY ).toString(); } void setMountPoint( Partition* partition, const QString& value ) { partition->setProperty( MOUNT_POINT_PROPERTY, value ); } bool format( Partition* partition ) { return partition->property( FORMAT_PROPERTY ).toBool(); } void setFormat( Partition* partition, bool value ) { partition->setProperty( FORMAT_PROPERTY, value ); } PartitionTable::Flags flags( const Partition* partition ) { auto v = partition->property( FLAGS_PROPERTY ); 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() ); } return partition->activeFlags(); } void setFlags( Partition* partition, PartitionTable::Flags f ) { partition->setProperty( FLAGS_PROPERTY, PartitionTable::Flags::Int( f ) ); } void reset( Partition* partition ) { partition->setProperty( MOUNT_POINT_PROPERTY, QVariant() ); partition->setProperty( FORMAT_PROPERTY, QVariant() ); partition->setProperty( FLAGS_PROPERTY, QVariant() ); } bool isDirty( Partition* partition ) { if ( LvmDevice::s_DirtyPVs.contains( partition ) ) { return true; } return !mountPoint( partition ).isEmpty() || format( partition ) || flags( partition ) != partition->activeFlags(); } } // namespace PartitionInfo calamares-3.2.41.1/src/modules/partition/core/PartitionInfo.h000066400000000000000000000031471410275732300240370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONINFO_H #define PARTITIONINFO_H #include #include #include class Partition; /** * Functions to store Calamares-specific information in the Qt properties of a * Partition object. * * See README.md for the rational behind this design. * * Properties: * - mountPoint: which directory will a partition be mounted on the installed * system. This is different from Partition::mountPoint, which is the * directory on which a partition is *currently* mounted while the installer * is running. * - format: whether this partition should be formatted at install time. */ namespace PartitionInfo { QString mountPoint( Partition* partition ); void setMountPoint( Partition* partition, const QString& value ); bool format( Partition* partition ); void setFormat( Partition* partition, bool value ); PartitionTable::Flags flags( const Partition* partition ); void setFlags( Partition* partition, PartitionTable::Flags f ); void reset( Partition* partition ); /** * Returns true if one of the property has been set. This information is used * by the UI to decide whether the "Revert" button should be enabled or * disabled. */ bool isDirty( Partition* partition ); }; // namespace PartitionInfo #endif /* PARTITIONINFO_H */ calamares-3.2.41.1/src/modules/partition/core/PartitionLayout.cpp000066400000000000000000000317511410275732300247560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include "core/PartitionLayout.h" #include "core/KPMHelpers.h" #include "core/PartUtils.h" #include "core/PartitionActions.h" #include "core/PartitionInfo.h" #include "utils/Variant.h" #include #include #include PartitionLayout::PartitionLayout() {} PartitionLayout::PartitionLayout( const PartitionLayout& layout ) : 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( const PartitionEntry& entry ) { if ( !entry.isValid() ) { return false; } m_partLayout.append( entry ); return true; } 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 ); } void PartitionLayout::setDefaultFsType(FileSystem::Type defaultFsType) { using FileSystem = FileSystem::Type; switch ( defaultFsType ) { 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; } m_defaultFsType = defaultFsType; } QList< Partition* > 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; // 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; // 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 ) ) { if ( !entry.partSize.isValid() ) { cWarning() << "Partition" << entry.partMountPoint << "size is invalid, skipping..."; continue; } // 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 ) { 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; if ( luksPassphrase.isEmpty() ) { part = KPMHelpers::createNewPartition( parent, *dev, role, correctFS( entry.partFileSystem ), entry.partLabel, currentSector, currentSector + sectors - 1, KPM_PARTITION_FLAG( None ) ); } else { part = KPMHelpers::createNewEncryptedPartition( parent, *dev, role, correctFS( entry.partFileSystem ), entry.partLabel, currentSector, currentSector + sectors - 1, luksPassphrase, KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( part, true ); PartitionInfo::setMountPoint( part, entry.partMountPoint ); if ( !entry.partLabel.isEmpty() ) { part->setLabel( entry.partLabel ); part->fileSystem().setLabel( entry.partLabel ); } if ( !entry.partUUID.isEmpty() ) { part->setUUID( entry.partUUID ); } if ( !entry.partType.isEmpty() ) { #if defined( WITH_KPMCORE42API ) part->setType( entry.partType ); #else cWarning() << "Ignoring type; requires KPMcore >= 4.2.0."; #endif } if ( entry.partAttributes ) { #if defined( WITH_KPMCORE42API ) 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() ) { part->fileSystem().addFeature( k, entry.partFeatures.value( k ) ); } #else cWarning() << "Ignoring features; requires KPMcore >= 4.2.0."; #endif } // 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( part ); currentSector += sectors; availableSectors -= sectors; } return partList; } calamares-3.2.41.1/src/modules/partition/core/PartitionLayout.h000066400000000000000000000104101410275732300244100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018-2019 Collabora Ltd * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONLAYOUT_H #define PARTITIONLAYOUT_H #include "partition/PartitionSize.h" #include "core/PartUtils.h" // KPMcore #include #include // Qt #include #include #include class Partition; class PartitionLayout { public: struct PartitionEntry { QString partLabel; QString partUUID; QString partType; quint64 partAttributes = 0; QString partMountPoint; FileSystem::Type partFileSystem = FileSystem::Unknown; QVariantMap partFeatures; CalamaresUtils::Partition::PartitionSize partSize; CalamaresUtils::Partition::PartitionSize partMinSize; CalamaresUtils::Partition::PartitionSize partMaxSize; /// @brief All-zeroes PartitionEntry 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 { if ( !partSize.isValid() || ( partMinSize.isValid() && partMaxSize.isValid() && partMinSize > partMaxSize ) ) { return false; } return true; } }; PartitionLayout(); PartitionLayout( const PartitionLayout& layout ); ~PartitionLayout(); /** @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* > createPartitions( Device* dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); private: QList< PartitionEntry > m_partLayout; FileSystem::Type m_defaultFsType = FileSystem::Type::Unknown; }; #endif /* PARTITIONLAYOUT_H */ calamares-3.2.41.1/src/modules/partition/core/PartitionModel.cpp000066400000000000000000000231751410275732300245420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "core/PartitionModel.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" // CalaPM #include #include #include #include // KF5 #include // Qt #include using CalamaresUtils::Partition::isPartitionFreeSpace; using CalamaresUtils::Partition::isPartitionNew; //- ResetHelper -------------------------------------------- PartitionModel::ResetHelper::ResetHelper( PartitionModel* model ) : m_model( model ) { m_model->m_lock.lock(); m_model->beginResetModel(); } PartitionModel::ResetHelper::~ResetHelper() { // We need to unlock the mutex before emitting the reset signal, // because the reset will cause clients to start looking at the // (new) data. m_model->m_lock.unlock(); m_model->endResetModel(); } //- PartitionModel ----------------------------------------- PartitionModel::PartitionModel( QObject* parent ) : QAbstractItemModel( parent ) , m_device( nullptr ) { } void PartitionModel::init( Device* device, const OsproberEntryList& osproberEntries ) { QMutexLocker lock( &m_lock ); beginResetModel(); m_device = device; m_osproberEntries = osproberEntries; endResetModel(); } int PartitionModel::columnCount( const QModelIndex& ) const { return ColumnCount; } int PartitionModel::rowCount( const QModelIndex& parent ) const { Partition* parentPartition = partitionForIndex( parent ); if ( parentPartition ) { return parentPartition->children().count(); } PartitionTable* table = m_device->partitionTable(); return table ? table->children().count() : 0; } QModelIndex PartitionModel::index( int row, int column, const QModelIndex& parent ) const { PartitionNode* parentPartition = parent.isValid() ? static_cast< PartitionNode* >( partitionForIndex( parent ) ) : static_cast< PartitionNode* >( m_device->partitionTable() ); if ( !parentPartition ) { return QModelIndex(); } auto lst = parentPartition->children(); if ( row < 0 || row >= lst.count() ) { return QModelIndex(); } if ( column < 0 || column >= ColumnCount ) { return QModelIndex(); } Partition* partition = parentPartition->children().at( row ); return createIndex( row, column, partition ); } QModelIndex PartitionModel::parent( const QModelIndex& child ) const { if ( !child.isValid() ) { return QModelIndex(); } Partition* partition = partitionForIndex( child ); if ( !partition ) { return QModelIndex(); } PartitionNode* parentNode = partition->parent(); if ( parentNode == m_device->partitionTable() ) { return QModelIndex(); } int row = 0; for ( auto p : m_device->partitionTable()->children() ) { if ( parentNode == p ) { return createIndex( row, 0, parentNode ); } ++row; } cWarning() << "No parent found!"; return QModelIndex(); } QVariant PartitionModel::data( const QModelIndex& index, int role ) const { Partition* partition = partitionForIndex( index ); if ( !partition ) { return QVariant(); } switch ( role ) { case Qt::DisplayRole: { int col = index.column(); if ( col == NameColumn ) { if ( isPartitionFreeSpace( partition ) ) { return tr( "Free Space" ); } else { return isPartitionNew( partition ) ? tr( "New partition" ) : partition->partitionPath(); } } if ( col == FileSystemColumn ) { return CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); } if ( col == FileSystemLabelColumn ) { return partition->fileSystem().label(); } if ( col == MountPointColumn ) { return PartitionInfo::mountPoint( partition ); } if ( col == SizeColumn ) { qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); return KFormat().formatByteSize( size ); } cDebug() << "Unknown column" << col; return QVariant(); } case Qt::DecorationRole: if ( index.column() == NameColumn ) { return ColorUtils::colorForPartition( partition ); } else { return QVariant(); } case Qt::ToolTipRole: { int col = index.column(); QString name; if ( col == NameColumn ) { if ( isPartitionFreeSpace( partition ) ) { name = tr( "Free Space" ); } else { name = isPartitionNew( partition ) ? tr( "New partition" ) : partition->partitionPath(); } } QString prettyFileSystem = CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() ); qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); QString prettySize = KFormat().formatByteSize( size ); return QVariant( name + " " + prettyFileSystem + " " + prettySize ); } case SizeRole: return ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize(); case IsFreeSpaceRole: return isPartitionFreeSpace( partition ); case IsPartitionNewRole: return isPartitionNew( partition ); case FileSystemLabelRole: if ( partition->fileSystem().supportGetLabel() != FileSystem::cmdSupportNone && !partition->fileSystem().label().isEmpty() ) { return partition->fileSystem().label(); } return QVariant(); case FileSystemTypeRole: return partition->fileSystem().type(); case PartitionPathRole: return partition->partitionPath(); case PartitionPtrRole: return QVariant::fromValue( (void*)partition ); // Osprober roles: case OsproberNameRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.prettyName; } return QVariant(); case OsproberPathRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.path; } return QVariant(); case OsproberCanBeResizedRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.canBeResized; } return QVariant(); case OsproberRawLineRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.line; } return QVariant(); case OsproberHomePartitionPathRole: foreach ( const OsproberEntry& osproberEntry, m_osproberEntries ) if ( partition->fileSystem().supportGetUUID() != FileSystem::cmdSupportNone && !partition->fileSystem().uuid().isEmpty() && osproberEntry.uuid == partition->fileSystem().uuid() ) { return osproberEntry.homePath; } return QVariant(); // end Osprober roles. default: return QVariant(); } } QVariant PartitionModel::headerData( int section, Qt::Orientation, int role ) const { if ( role != Qt::DisplayRole ) { return QVariant(); } switch ( section ) { case NameColumn: return tr( "Name" ); case FileSystemColumn: return tr( "File System" ); case FileSystemLabelColumn: return tr( "File System Label" ); case MountPointColumn: return tr( "Mount Point" ); case SizeColumn: return tr( "Size" ); default: cDebug() << "Unknown column" << section; return QVariant(); } } Partition* PartitionModel::partitionForIndex( const QModelIndex& index ) const { QMutexLocker lock( &m_lock ); if ( !index.isValid() ) { return nullptr; } return reinterpret_cast< Partition* >( index.internalPointer() ); } void PartitionModel::update() { Q_EMIT dataChanged( index( 0, 0 ), index( rowCount() - 1, columnCount() - 1 ) ); } calamares-3.2.41.1/src/modules/partition/core/PartitionModel.h000066400000000000000000000066121410275732300242040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONMODEL_H #define PARTITIONMODEL_H #include "OsproberEntry.h" // Qt #include #include class Device; class Partition; class PartitionNode; /** * A Qt tree model which exposes the partitions of a device. * * Its depth is only more than 1 if the device has extended partitions. * * Note on updating: * * The Device class does not notify the outside world of changes on the * Partition objects it owns. Since a Qt model must notify its views *before* * and *after* making changes, it is important to make use of * the PartitionModel::ResetHelper class to wrap changes. * * This is what PartitionCoreModule does when it create jobs. */ class PartitionModel : public QAbstractItemModel { Q_OBJECT 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 Q_EMIT modelAboutToBeReset() when instantiated and modelReset() when * destructed. */ class ResetHelper { public: ResetHelper( PartitionModel* model ); ~ResetHelper(); ResetHelper( const ResetHelper& ) = delete; ResetHelper& operator=( const ResetHelper& ) = delete; private: PartitionModel* m_model; }; enum { // The raw size, as a qlonglong. This is different from the DisplayRole of // SizeColumn, which is a human-readable string. SizeRole = Qt::UserRole + 1, IsFreeSpaceRole, IsPartitionNewRole, FileSystemLabelRole, FileSystemTypeRole, PartitionPathRole, PartitionPtrRole, // passed as void*, use sparingly OsproberNameRole, OsproberPathRole, OsproberCanBeResizedRole, OsproberRawLineRole, OsproberHomePartitionPathRole }; enum Column { NameColumn, FileSystemColumn, FileSystemLabelColumn, MountPointColumn, SizeColumn, ColumnCount // Must remain last }; PartitionModel( QObject* parent = nullptr ); /** * device must remain alive for the life of PartitionModel */ void init( Device* device, const OsproberEntryList& osproberEntries ); // QAbstractItemModel API QModelIndex index( int row, int column, const QModelIndex& parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex& child ) const override; int columnCount( const QModelIndex& parent = QModelIndex() ) const override; int rowCount( const QModelIndex& parent = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const override; QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; Partition* partitionForIndex( const QModelIndex& index ) const; Device* device() const { return m_device; } void update(); private: friend class ResetHelper; Device* m_device; OsproberEntryList m_osproberEntries; mutable QMutex m_lock; }; #endif /* PARTITIONMODEL_H */ calamares-3.2.41.1/src/modules/partition/gui/000077500000000000000000000000001410275732300207305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/partition/gui/BootInfoWidget.cpp000066400000000000000000000072601410275732300243240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "BootInfoWidget.h" #include "core/PartUtils.h" #include "utils/CalamaresUtilsGui.h" #include "utils/QtCompat.h" #include "utils/Retranslator.h" #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" ); QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); mainLayout->addWidget( m_bootIcon ); mainLayout->addWidget( m_bootLabel ); QSize iconSize = CalamaresUtils::defaultIconSize(); m_bootIcon->setMargin( 0 ); m_bootIcon->setFixedSize( 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( WindowText, QColor( "#4D4D4D" ) ); //dark grey m_bootIcon->setAutoFillBackground( true ); m_bootLabel->setAutoFillBackground( true ); m_bootIcon->setPalette( palette ); m_bootLabel->setPalette( palette ); CALAMARES_RETRANSLATE( retranslateUi(); ); } void BootInfoWidget::retranslateUi() { m_bootIcon->setToolTip( tr( "The boot environment of this system.

" "Older x86 systems only support BIOS.
" "Modern systems usually use EFI, but " "may also show up as BIOS if started in compatibility " "mode." ) ); QString bootToolTip; if ( PartUtils::isEfiSystem() ) { m_bootLabel->setText( "EFI " ); bootToolTip = tr( "This system was started with an EFI " "boot environment.

" "To configure startup from an EFI environment, this installer " "must deploy a boot loader application, like GRUB" " or systemd-boot on an " "EFI System Partition. This is automatic, unless " "you choose manual partitioning, in which case you must " "choose it or create it on your own." ); } else { m_bootLabel->setText( "BIOS" ); bootToolTip = tr( "This system was started with a BIOS " "boot environment.

" "To configure startup from a BIOS environment, this installer " "must install a boot loader, like GRUB" ", either at the beginning of a partition or " "on the Master Boot Record 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." ); } m_bootLabel->setToolTip( bootToolTip ); } calamares-3.2.41.1/src/modules/partition/gui/BootInfoWidget.h000066400000000000000000000011271410275732300237650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef BOOTINFOWIDGET_H #define BOOTINFOWIDGET_H #include class QLabel; class BootInfoWidget : public QWidget { Q_OBJECT public: explicit BootInfoWidget( QWidget* parent = nullptr ); public slots: void retranslateUi(); private: QLabel* m_bootIcon; QLabel* m_bootLabel; }; #endif // BOOTINFOWIDGET_H calamares-3.2.41.1/src/modules/partition/gui/ChoicePage.cpp000066400000000000000000001702201410275732300234250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ChoicePage.h" #include "Config.h" #include "core/BootLoaderModel.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/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 "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 "widgets/PrettyRadioButton.h" #include #include #ifdef WITH_KPMCORE4API #include #endif #include #include #include #include #include #include #include #include using Calamares::PrettyRadioButton; using CalamaresUtils::Partition::findPartitionByPath; 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( Config* config, QWidget* parent ) : QWidget( parent ) , m_config( config ) , m_nextEnabled( false ) , m_core( nullptr ) , m_isEfi( false ) , m_grp( nullptr ) , m_alongsideButton( nullptr ) , m_eraseButton( nullptr ) , m_replaceButton( nullptr ) , m_somethingElseButton( nullptr ) , m_eraseSwapChoiceComboBox( nullptr ) , m_deviceInfoWidget( nullptr ) , m_beforePartitionBarsView( nullptr ) , m_beforePartitionLabelsView( nullptr ) , m_bootloaderComboBox( nullptr ) , m_enableEncryptionWidget( true ) { setupUi( this ); auto gs = Calamares::JobQueue::instance()->globalStorage(); m_requiredPartitionTableType = gs->value( "requiredPartitionTableType" ).toStringList(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); m_drivesLayout->setDirection( QBoxLayout::LeftToRight ); BootInfoWidget* bootInfoWidget = new BootInfoWidget( this ); m_drivesLayout->insertWidget( 0, bootInfoWidget ); m_drivesLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() / 2 ); m_drivesCombo = new QComboBox( this ); m_mainLayout->setStretchFactor( m_drivesLayout, 0 ); m_mainLayout->setStretchFactor( m_rightLayout, 1 ); m_drivesLabel->setBuddy( m_drivesCombo ); m_drivesLayout->addWidget( m_drivesCombo ); m_deviceInfoWidget = new DeviceInfoWidget; m_drivesLayout->addWidget( m_deviceInfoWidget ); m_drivesLayout->addStretch(); m_messageLabel->setWordWrap( true ); m_messageLabel->hide(); CalamaresUtils::unmarginLayout( m_itemsLayout ); // Drive selector + preview CALAMARES_RETRANSLATE_SLOT( &ChoicePage::retranslate ); m_previewBeforeFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterFrame->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Expanding ); m_previewAfterLabel->hide(); m_previewAfterFrame->hide(); m_encryptWidget->hide(); m_reuseHomeCheckBox->hide(); gs->insert( "reuseHome", false ); } 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 ) { m_core = core; m_isEfi = PartUtils::isEfiSystem(); setupChoices(); // We need to do this because a PCM revert invalidates the deviceModel. connect( core, &PartitionCoreModule::reverted, this, [=] { setModelToComboBox( m_drivesCombo, core->deviceModel() ); m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); } ); setModelToComboBox( m_drivesCombo, core->deviceModel() ); 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 ); ChoicePage::applyDeviceChoice(); } /** @brief Creates a combobox with the given choices in it. * * Pre-selects the choice given by @p dflt. * No texts are set -- that happens later by the translator functions. */ 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 } ) if ( s.contains( c ) ) { box->addItem( QString(), c ); } int dfltIndex = box->findData( dflt ); if ( dfltIndex >= 0 ) { box->setCurrentIndex( dfltIndex ); } return box; } /** * @brief ChoicePage::setupChoices creates PrettyRadioButton objects for the action * choices. * @warning This must only run ONCE because it creates signal-slot connections for the * actions. When an action is triggered, it runs action-specific code that may * change the internal state of the PCM, and it updates the bottom preview (or * split) widget. * Synchronous loading ends here. */ void ChoicePage::setupChoices() { // sample os-prober output: // /dev/sda2:Windows 7 (loader):Windows:chain // /dev/sda6::Arch:linux // // There are three possibilities we have to consider: // - There are no operating systems present // - There is one operating system present // - There are multiple operating systems present // // There are three outcomes we have to provide: // 1) Wipe+autopartition // 2) Resize+autopartition // 3) Manual // TBD: upgrade option? 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_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_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_replaceButton->addToGroup( m_grp, InstallChoice::Replace ); // Fill up swap options if ( m_config->swapChoices().count() > 1 ) { 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_itemsLayout->addWidget( m_somethingElseButton ); m_somethingElseButton->addToGroup( m_grp, InstallChoice::Manual ); m_itemsLayout->addStretch(); #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(); 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(); 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 ); if ( m_eraseSwapChoiceComboBox ) { connect( m_eraseSwapChoiceComboBox, QOverload< int >::of( &QComboBox::currentIndexChanged ), this, &ChoicePage::onEraseSwapChoiceChanged ); } updateSwapChoicesTr(); updateChoiceButtonsTr(); } /** * @brief ChoicePage::selectedDevice queries the device picker (which may be a combo or * a list view) to get a pointer to the currently selected Device. * @return a Device pointer, valid in the current state of the PCM, or nullptr if * something goes wrong. */ Device* ChoicePage::selectedDevice() { Device* currentDevice = nullptr; currentDevice = m_core->deviceModel()->deviceForIndex( m_core->deviceModel()->index( m_drivesCombo->currentIndex() ) ); return currentDevice; } void ChoicePage::hideButtons() { m_eraseButton->hide(); m_replaceButton->hide(); m_alongsideButton->hide(); 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 * picker. Calls ChoicePage::selectedDevice() to get the current Device*, then * updates the preview widget for the on-disk state (calls ChoicePage:: * updateDeviceStatePreview()) and finally sets up the available actions and their * text by calling ChoicePage::setupActions(). */ void ChoicePage::applyDeviceChoice() { if ( !selectedDevice() ) { hideButtons(); return; } if ( m_core->isDirty() ) { ScanningDialog::run( QtConcurrent::run( [=] { QMutexLocker locker( &m_coreMutex ); m_core->revertAllDevices(); } ), [this] { continueApplyDeviceChoice(); }, this ); } else { continueApplyDeviceChoice(); } } void ChoicePage::continueApplyDeviceChoice() { Device* currd = selectedDevice(); // The device should only be nullptr immediately after a PCM reset. // applyDeviceChoice() will be called again momentarily as soon as we handle the // PartitionCoreModule::reverted signal. if ( !currd ) { hideButtons(); return; } updateDeviceStatePreview(); // Preview setup done. Now we show/hide choices as needed. setupActions(); 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() ); } Q_EMIT actionChosen(); Q_EMIT deviceChosen(); } void ChoicePage::onActionChanged() { Device* currd = selectedDevice(); if ( currd ) { applyActionChoice( m_config->installChoice() ); } } void ChoicePage::onEraseSwapChoiceChanged() { if ( m_eraseSwapChoiceComboBox ) { m_config->setSwapChoice( m_eraseSwapChoiceComboBox->currentData().toInt() ); onActionChanged(); } } void ChoicePage::applyActionChoice( InstallChoice choice ) { 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 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() ) { ScanningDialog::run( QtConcurrent::run( [=] { QMutexLocker locker( &m_coreMutex ); m_core->revertDevice( selectedDevice() ); } ), [=] { PartitionActions::doAutopartition( m_core, selectedDevice(), options ); Q_EMIT deviceChosen(); }, this ); } 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 ); } connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), this, SLOT( onPartitionToReplaceSelected( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; 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( m_config->installChoice() ); updateNextEnabled(); }, this ); } connect( m_beforePartitionBarsView->selectionModel(), SIGNAL( currentRowChanged( QModelIndex, QModelIndex ) ), this, SLOT( doAlongsideSetupSplitter( QModelIndex, QModelIndex ) ), Qt::UniqueConnection ); break; case InstallChoice::NoChoice: case InstallChoice::Manual: break; } updateNextEnabled(); updateActionChoicePreview( choice ); } void 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() << "Partition not found for index" << current; return; } 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 ); if ( m_isEfi ) { setupEfiSystemPartitionSelector(); } cDebug() << "Partition selected for Alongside."; updateNextEnabled(); } void ChoicePage::onEncryptWidgetStateChanged() { EncryptWidget::Encryption state = m_encryptWidget->state(); if ( m_config->installChoice() == InstallChoice::Erase ) { if ( state == EncryptWidget::Encryption::Confirmed || state == EncryptWidget::Encryption::Disabled ) { 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(); } void ChoicePage::onHomeCheckBoxStateChanged() { if ( m_config->installChoice() == InstallChoice::Replace && m_beforePartitionBarsView->selectionModel()->currentIndex().isValid() ) { doReplaceSelectedPartition( m_beforePartitionBarsView->selectionModel()->currentIndex() ); } } void ChoicePage::onLeave() { if ( m_config->installChoice() == InstallChoice::Alongside ) { doAlongsideApply(); } 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() ); } else if ( efiSystemPartitions.count() > 1 && m_efiComboBox ) { PartitionInfo::setMountPoint( 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; } } else // installPath is then passed to the bootloader module for MBR setup { if ( !m_isEfi ) { if ( m_bootloaderComboBox.isNull() ) { 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() ); } } } } void ChoicePage::doAlongsideApply() { Q_ASSERT( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0 ); Q_ASSERT( m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ); QMutexLocker locker( &m_coreMutex ); QString path = m_beforePartitionBarsView->selectionModel() ->currentIndex() .data( PartitionModel::PartitionPathRole ) .toString(); DeviceModel* dm = m_core->deviceModel(); for ( int i = 0; i < dm->rowCount(); ++i ) { Device* dev = dm->deviceForIndex( dm->index( i ) ); Partition* candidate = findPartitionByPath( { dev }, path ); if ( candidate ) { qint64 firstSector = candidate->firstSector(); qint64 oldLastSector = candidate->lastSector(); 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->dumpQueue(); break; } } } void 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 ); doReplaceSelectedPartition( current ); } void ChoicePage::doReplaceSelectedPartition( const QModelIndex& current ) { if ( !current.isValid() ) { return; } // This will be deleted by the second lambda, below. QString* homePartitionPath = new QString(); ScanningDialog::run( QtConcurrent::run( [this, current, homePartitionPath]( bool doReuseHomePartition ) { QMutexLocker locker( &m_coreMutex ); if ( m_core->isDirty() ) { m_core->revertDevice( selectedDevice() ); } // 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() ) { 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 { // 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 ); } } } }, 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(); updateNextEnabled(); if ( !m_bootloaderComboBox.isNull() && m_bootloaderComboBox->currentIndex() < 0 ) m_bootloaderComboBox->setCurrentIndex( m_lastSelectedDeviceIndex ); }, this ); } /** * @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() { //FIXME: this needs to be made async because the rescan can block the UI thread for // a while. --Teo 10/2015 Device* currentDevice = selectedDevice(); Q_ASSERT( currentDevice ); QMutexLocker locker( &m_previewsMutex ); cDebug() << "Updating partitioning state widgets."; qDeleteAll( m_previewBeforeFrame->children() ); 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; m_beforePartitionBarsView = new PartitionBarsView( m_previewBeforeFrame ); m_beforePartitionBarsView->setNestedPartitionsMode( mode ); m_beforePartitionLabelsView = new PartitionLabelsView( m_previewBeforeFrame ); m_beforePartitionLabelsView->setExtendedPartitionHidden( mode == PartitionBarsView::NoNestedPartitions ); Device* deviceBefore = m_core->immutableDeviceCopy( currentDevice ); PartitionModel* model = new PartitionModel( m_beforePartitionBarsView ); model->init( deviceBefore, m_core->osproberEntries() ); m_beforePartitionBarsView->setModel( model ); m_beforePartitionLabelsView->setModel( model ); // Make the bars and labels view use the same selectionModel. auto sm = m_beforePartitionLabelsView->selectionModel(); m_beforePartitionLabelsView->setSelectionModel( m_beforePartitionBarsView->selectionModel() ); if ( sm ) { sm->deleteLater(); } switch ( m_config->installChoice() ) { case InstallChoice::Replace: case InstallChoice::Alongside: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::SingleSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::SingleSelection ); break; case InstallChoice::NoChoice: case InstallChoice::Erase: case InstallChoice::Manual: m_beforePartitionBarsView->setSelectionMode( QAbstractItemView::NoSelection ); m_beforePartitionLabelsView->setSelectionMode( QAbstractItemView::NoSelection ); } layout->addWidget( m_beforePartitionBarsView ); layout->addWidget( m_beforePartitionLabelsView ); } /** * @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( InstallChoice choice ) { Device* currentDevice = selectedDevice(); Q_ASSERT( currentDevice ); QMutexLocker locker( &m_previewsMutex ); cDebug() << "Updating partitioning preview widgets."; qDeleteAll( m_previewAfterFrame->children() ); 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; m_reuseHomeCheckBox->hide(); Calamares::JobQueue::instance()->globalStorage()->insert( "reuseHome", false ); switch ( choice ) { case InstallChoice::Alongside: { 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_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 ) { 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( 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_config->installChoice() == InstallChoice::Erase ) { m_selectLabel->hide(); } else { SelectionFilter filter = []( const QModelIndex& index ) { return PartUtils::canBeReplaced( static_cast< Partition* >( index.data( PartitionModel::PartitionPtrRole ).value< void* >() ), Logger::Once() ); }; m_beforePartitionBarsView->setSelectionFilter( filter ); m_beforePartitionLabelsView->setSelectionFilter( filter ); m_selectLabel->show(); m_selectLabel->setText( tr( "Select a partition to install on" ) ); } break; } case InstallChoice::NoChoice: case InstallChoice::Manual: m_selectLabel->hide(); m_previewAfterFrame->hide(); m_previewBeforeLabel->setText( tr( "Current:" ) ); m_previewAfterLabel->hide(); m_encryptWidget->hide(); break; } if ( m_isEfi && ( m_config->installChoice() == InstallChoice::Alongside || m_config->installChoice() == InstallChoice::Replace ) ) { QHBoxLayout* efiLayout = new QHBoxLayout; layout->addLayout( efiLayout ); m_efiLabel = new QLabel( m_previewAfterFrame ); efiLayout->addWidget( m_efiLabel ); m_efiComboBox = new QComboBox( m_previewAfterFrame ); efiLayout->addWidget( m_efiComboBox ); m_efiLabel->setBuddy( m_efiComboBox ); m_efiComboBox->hide(); efiLayout->addStretch(); } // Also handle selection behavior on beforeFrame. QAbstractItemView::SelectionMode previewSelectionMode = QAbstractItemView::NoSelection; switch ( m_config->installChoice() ) { case InstallChoice::Replace: case InstallChoice::Alongside: previewSelectionMode = QAbstractItemView::SingleSelection; break; case InstallChoice::NoChoice: case InstallChoice::Erase: case InstallChoice::Manual: previewSelectionMode = QAbstractItemView::NoSelection; } m_beforePartitionBarsView->setSelectionMode( previewSelectionMode ); m_beforePartitionLabelsView->setSelectionMode( previewSelectionMode ); } void ChoicePage::setupEfiSystemPartitionSelector() { Q_ASSERT( m_isEfi ); // Only the already existing ones: QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); 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::instance()->shortProductName() ) ); updateNextEnabled(); } 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::instance()->shortProductName() ) ); } else { m_efiComboBox->show(); m_efiLabel->setText( tr( "EFI system partition:" ) ); for ( int i = 0; i < efiSystemPartitions.count(); ++i ) { Partition* efiPartition = efiSystemPartitions.at( i ); 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 ) { m_efiComboBox->setCurrentIndex( i ); } } } } QComboBox* ChoicePage::createBootloaderComboBox( QWidget* parent ) { QComboBox* comboForBootloader = new QComboBox( parent ); comboForBootloader->setModel( m_core->bootLoaderModel() ); // When the chosen bootloader device changes, we update the choice in the PCM 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 comboForBootloader; } static inline void force_uncheck( QButtonGroup* grp, PrettyRadioButton* button ) { button->hide(); grp->setExclusive( false ); button->setChecked( false ); grp->setExclusive( true ); } static inline QDebug& operator<<( QDebug& s, PartitionIterator& it ) { s << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); return s; } /** * @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. */ void ChoicePage::setupActions() { Logger::Once o; 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_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 ) { cDebug() << Logger::SubEntry << "part of an inactive RAID device"; isInactiveRAID = true; } #endif PartitionTable::TableType tableType = PartitionTable::unknownTableType; if ( currentDevice->partitionTable() ) { tableType = currentDevice->partitionTable()->type(); matchTableType = m_requiredPartitionTableType.size() == 0 || m_requiredPartitionTableType.contains( PartitionTable::tableTypeToName( 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, o ) ) { cDebug() << Logger::SubEntry << "contains replaceable" << it; atLeastOneCanBeReplaced = true; } if ( ( *it )->isMounted() ) { atLeastOneIsMounted = true; } } if ( osproberEntriesForCurrentDevice.count() == 0 ) { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 0 osprober entries"; m_messageLabel->setText( tr( "This storage device does not seem to have an operating system on it. " "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." ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); m_replaceButton->hide(); m_alongsideButton->hide(); m_grp->setExclusive( false ); m_replaceButton->setChecked( false ); m_alongsideButton->setChecked( false ); m_grp->setExclusive( true ); } else if ( osproberEntriesForCurrentDevice.count() == 1 ) { QString osName = osproberEntriesForCurrentDevice.first().prettyName; if ( !osName.isEmpty() ) { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 1 non-empty osprober entry"; m_messageLabel->setText( tr( "This storage device has %1 on it. " "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 ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } else { CALAMARES_RETRANSLATE( cDebug() << "Setting texts for 1 empty osprober entry"; m_messageLabel->setText( tr( "This storage device already has an operating system on it. " "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." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } } else { // osproberEntriesForCurrentDevice has at least 2 items. CALAMARES_RETRANSLATE( cDebug() << "Setting texts for >= 2 osprober entries"; m_messageLabel->setText( tr( "This storage device has multiple operating systems on it. " "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." ) ); m_alongsideButton->setText( tr( "Install alongside
" "The installer will shrink a partition to make room for %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); m_eraseButton->setText( tr( "Erase disk
" "This will delete all data " "currently present on the selected storage device." ) ); m_replaceButton->setText( tr( "Replace a partition
" "Replaces a partition with %1." ) .arg( Calamares::Branding::instance()->shortVersionedName() ) ); ); } #ifdef DEBUG_PARTITION_UNSAFE #ifdef DEBUG_PARTITION_LAME // If things can't be broken, allow all the buttons atLeastOneCanBeReplaced = true; atLeastOneCanBeResized = true; atLeastOneIsMounted = false; isInactiveRAID = false; #endif #endif if ( atLeastOneCanBeReplaced ) { m_replaceButton->show(); } else { cDebug() << "No partitions available for replace-action."; force_uncheck( m_grp, m_replaceButton ); } if ( atLeastOneCanBeResized ) { m_alongsideButton->show(); } else { cDebug() << "No partitions available for resize-action."; force_uncheck( m_grp, m_alongsideButton ); } if ( !atLeastOneIsMounted && !isInactiveRAID ) { m_eraseButton->show(); // None mounted } else { cDebug() << "No partitions (" << "any-mounted?" << atLeastOneIsMounted << "is-raid?" << isInactiveRAID << ") for erase-action."; force_uncheck( m_grp, m_eraseButton ); } bool isEfi = PartUtils::isEfiSystem(); bool efiSystemPartitionFound = !m_core->efiSystemPartitions().isEmpty(); if ( isEfi && !efiSystemPartitionFound ) { cWarning() << "System is EFI but there's no EFI system partition, " "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( m_requiredPartitionTableType.join( " or " ) ) ); m_messageLabel->show(); cWarning() << "Partition table" << PartitionTable::tableTypeToName( tableType ) << "does not match the requirement " << m_requiredPartitionTableType.join( " or " ) << ", 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; } } OsproberEntryList ChoicePage::getOsproberEntriesForDevice( Device* device ) const { OsproberEntryList eList; for ( const OsproberEntry& entry : m_core->osproberEntries() ) { if ( entry.path.startsWith( device->deviceNode() ) ) { eList.append( entry ); } } return eList; } bool ChoicePage::isNextEnabled() const { return m_nextEnabled; } bool ChoicePage::calculateNextEnabled() const { 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 = calculateNextEnabled(); if ( enabled != m_nextEnabled ) { m_nextEnabled = enabled; Q_EMIT nextStatusChanged( enabled ); } } void ChoicePage::updateSwapChoicesTr() { if ( !m_eraseSwapChoiceComboBox ) { return; } 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 = 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 { 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() { return m_lastSelectedDeviceIndex; } void ChoicePage::setLastSelectedDeviceIndex( int index ) { m_lastSelectedDeviceIndex = index; m_drivesCombo->setCurrentIndex( m_lastSelectedDeviceIndex ); } calamares-3.2.41.1/src/modules/partition/gui/ChoicePage.h000066400000000000000000000117511410275732300230750ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CHOICEPAGE_H #define CHOICEPAGE_H #include "ui_ChoicePage.h" #include "Config.h" #include "core/OsproberEntry.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 Device; using SwapChoiceSet = Config::SwapChoiceSet; /** * @brief The ChoicePage class is the first page of the partitioning interface. * It offers a choice between partitioning operations and initiates all automated * partitioning modes. For manual partitioning, see PartitionPage. */ class ChoicePage : public QWidget, private Ui::ChoicePage { Q_OBJECT public: explicit ChoicePage( Config* config, QWidget* parent = nullptr ); ~ChoicePage() override; /** * @brief init runs when the PartitionViewStep and the PartitionCoreModule are * ready. Sets up the rest of the UI based on os-prober output. * @param core the PartitionCoreModule pointer. */ void init( PartitionCoreModule* core ); /** * @brief isNextEnabled answers whether the current state of the page is such * that progressing to the next page should be allowed. * @return true if next is allowed, otherwise false. */ bool isNextEnabled() const; /** * @brief onLeave runs when control passes from this page to another one. */ void onLeave(); /** * @brief applyActionChoice reacts to a choice of partitioning mode. * @param choice the partitioning action choice. */ void applyActionChoice( Config::InstallChoice choice ); int lastSelectedDeviceIndex(); void setLastSelectedDeviceIndex( int index ); signals: void nextStatusChanged( bool ); void actionChosen(); void deviceChosen(); private slots: void onPartitionToReplaceSelected( const QModelIndex& current, const QModelIndex& previous ); void doReplaceSelectedPartition( const QModelIndex& current ); void doAlongsideSetupSplitter( const QModelIndex& current, const QModelIndex& previous ); void onEncryptWidgetStateChanged(); void onHomeCheckBoxStateChanged(); /// @brief Calls applyActionChoice() as needed. void onActionChanged(); /// @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(); /* Change the UI depending on the device selected. */ void hideButtons(); // Hide everything when no device void applyDeviceChoice(); // Start scanning new device void continueApplyDeviceChoice(); // .. called after scan void updateDeviceStatePreview(); void updateActionChoicePreview( Config::InstallChoice choice ); void setupActions(); OsproberEntryList getOsproberEntriesForDevice( Device* device ) const; void doAlongsideApply(); void setupEfiSystemPartitionSelector(); // Translations support void updateSwapChoicesTr(); void updateChoiceButtonsTr(); Config* m_config; bool m_nextEnabled; PartitionCoreModule* m_core; QMutex m_previewsMutex; bool m_isEfi; QComboBox* m_drivesCombo; QButtonGroup* m_grp; 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; QPointer< PartitionBarsView > m_beforePartitionBarsView; QPointer< PartitionLabelsView > m_beforePartitionLabelsView; QPointer< PartitionBarsView > m_afterPartitionBarsView; QPointer< PartitionLabelsView > m_afterPartitionLabelsView; QPointer< PartitionSplitterWidget > m_afterPartitionSplitterWidget; QPointer< QComboBox > m_bootloaderComboBox; QPointer< QLabel > m_efiLabel; QPointer< QComboBox > m_efiComboBox; int m_lastSelectedDeviceIndex = -1; int m_lastSelectedActionIndex = -1; QStringList m_requiredPartitionTableType; bool m_enableEncryptionWidget; QMutex m_coreMutex; }; #endif // CHOICEPAGE_H calamares-3.2.41.1/src/modules/partition/gui/ChoicePage.ui000066400000000000000000000145751410275732300232720ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later ChoicePage 0 0 743 512 Form 0 <m_drivesLabel> <m_messageLabel> QFrame::NoFrame QFrame::Plain 0 true 0 0 729 233 0 0 0 0 QFrame::HLine QFrame::Raised <m_reuseHomeCheckBox> 0 0 Qt::Vertical QSizePolicy::Fixed 20 8 After: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 Qt::Vertical QSizePolicy::Fixed 20 8 Before: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 0 0 0 0 EncryptWidget QWidget
gui/EncryptWidget.h
1
calamares-3.2.41.1/src/modules/partition/gui/CreatePartitionDialog.cpp000066400000000000000000000271301410275732300256540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "CreatePartitionDialog.h" #include "ui_CreatePartitionDialog.h" #include "core/ColorUtils.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/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include #include #include #include #include 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 } ); CreatePartitionDialog::CreatePartitionDialog( Device* device, PartitionNode* parentPartition, const QStringList& usedMountPoints, QWidget* parentWidget ) : QDialog( parentWidget ) , m_ui( new Ui_CreatePartitionDialog ) , m_partitionSizeController( new PartitionSizeController( this ) ) , m_device( device ) , m_parent( parentPartition ) , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); m_ui->encryptWidget->setText( tr( "En&crypt" ) ); m_ui->encryptWidget->hide(); if ( m_device->type() != Device::Type::LVM_Device ) { m_ui->lvNameLabel->hide(); m_ui->lvNameLineEdit->hide(); } 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 ); } 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::canonicalFilesystemName( Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; } int defaultFsIndex = -1; int fsCounter = 0; QStringList fsNames; for ( auto fs : FileSystemFactory::map() ) { if ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) { fsNames << userVisibleFS( fs ); // This is put into the combobox if ( fs->type() == defaultFSType ) { defaultFsIndex = fsCounter; } fsCounter++; } } m_ui->fsComboBox->addItems( fsNames ); // Connections 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 ); // Select a default m_ui->fsComboBox->setCurrentIndex( defaultFsIndex ); updateMountPointUi(); checkMountPointSelection(); } 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 ) ); } void CreatePartitionDialog::initMbrPartitionTypeUi() { QString fixedPartitionString; bool parentIsPartitionTable = m_parent->isRoot(); if ( !parentIsPartitionTable ) { m_role = PartitionRole( PartitionRole::Logical ); fixedPartitionString = tr( "Logical" ); } else if ( m_device->partitionTable()->hasExtended() ) { m_role = PartitionRole( PartitionRole::Primary ); fixedPartitionString = tr( "Primary" ); } if ( fixedPartitionString.isEmpty() ) { m_ui->fixedPartitionLabel->hide(); } else { m_ui->fixedPartitionLabel->setText( fixedPartitionString ); m_ui->primaryRadioButton->hide(); m_ui->extendedRadioButton->hide(); } } void CreatePartitionDialog::initGptPartitionTypeUi() { m_role = PartitionRole( PartitionRole::Primary ); m_ui->fixedPartitionLabel->setText( tr( "GPT" ) ); m_ui->primaryRadioButton->hide(); m_ui->extendedRadioButton->hide(); } Partition* CreatePartitionDialog::getNewlyCreatedPartition() { if ( m_role.roles() == PartitionRole::None ) { 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() ); 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() ) { partition = KPMHelpers::createNewEncryptedPartition( m_parent, *m_device, m_role, fsType, fsLabel, first, last, luksPassphrase, PartitionTable::Flags() ); } else { partition = KPMHelpers::createNewPartition( 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() ); } PartitionInfo::setMountPoint( partition, selectedMountPoint( m_ui->mountPointComboBox ) ); PartitionInfo::setFormat( partition, true ); return partition; } void CreatePartitionDialog::updateMountPointUi() { bool enabled = m_ui->primaryRadioButton->isChecked(); if ( enabled ) { // This maps translated (user-visible) FS names to a type 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 ) ) { m_ui->encryptWidget->show(); m_ui->encryptWidget->reset(); } else { m_ui->encryptWidget->reset(); m_ui->encryptWidget->hide(); } } 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 ); } } void CreatePartitionDialog::initPartResizerWidget( Partition* partition ) { QColor color = CalamaresUtils::Partition::isPartitionFreeSpace( 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 ); } calamares-3.2.41.1/src/modules/partition/gui/CreatePartitionDialog.h000066400000000000000000000053751410275732300253300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CREATEPARTITIONDIALOG_H #define CREATEPARTITIONDIALOG_H // KPMcore #include #include #include #include class Device; class Partition; class PartitionNode; class PartitionSizeController; class Ui_CreatePartitionDialog; /** * The dialog which is shown to create a new partition or to edit a * to-be-created partition. */ class CreatePartitionDialog : public QDialog { Q_OBJECT private: /** @brief Delegated constructor * * This does all the shared UI setup. */ CreatePartitionDialog( Device* device, PartitionNode* parentPartition, const QStringList& usedMountPoints, QWidget* parentWidget ); public: struct FreeSpace { Partition* p; }; struct FreshPartition { Partition* p; }; /** @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. */ 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; private Q_SLOTS: void updateMountPointUi(); void checkMountPointSelection(); private: QScopedPointer< Ui_CreatePartitionDialog > m_ui; PartitionSizeController* m_partitionSizeController; Device* m_device; PartitionNode* m_parent; PartitionRole m_role = PartitionRole( PartitionRole::None ); QStringList m_usedMountPoints; void initGptPartitionTypeUi(); void initMbrPartitionTypeUi(); void initPartResizerWidget( Partition* ); }; #endif /* CREATEPARTITIONDIALOG_H */ calamares-3.2.41.1/src/modules/partition/gui/CreatePartitionDialog.ui000066400000000000000000000217401410275732300255100ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> SPDX-License-Identifier: GPL-3.0-or-later CreatePartitionDialog 0 0 763 689 Create a Partition 0 0 0 59 Si&ze: sizeSpinBox MiB Partition &Type: primaryRadioButton &Primary true E&xtended [fixed-partition-label] Qt::Horizontal 40 20 Qt::Vertical 20 13 Fi&le System: fsComboBox Qt::Vertical QSizePolicy::Fixed 20 13 LVM LV name &Mount Point: mountPointComboBox true -1 Flags: true QAbstractItemView::NoSelection true Qt::Vertical 17 13 150 16777215 Label for the filesystem 16 FS Label: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok PartResizerWidget QWidget
kpmcore/gui/partresizerwidget.h
1
EncryptWidget QWidget
gui/EncryptWidget.h
1
primaryRadioButton fsComboBox buttonBox accepted() CreatePartitionDialog accept() 185 203 157 178 buttonBox rejected() CreatePartitionDialog reject() 185 203 243 178 extendedRadioButton toggled(bool) fsComboBox setDisabled(bool) 131 36 134 66 extendedRadioButton toggled(bool) label_2 setDisabled(bool) 109 43 79 64
calamares-3.2.41.1/src/modules/partition/gui/CreatePartitionTableDialog.ui000066400000000000000000000067541410275732300264700ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> SPDX-License-Identifier: GPL-3.0-or-later CreatePartitionTableDialog 0 0 297 182 0 0 Create Partition Table 75 true [are-you-sure-message] Creating a new partition table will delete all existing data on the disk. true Qt::Vertical QSizePolicy::Fixed 20 24 What kind of partition table do you want to create? Master Boot Record (MBR) true GUID Partition Table (GPT) Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok mbrRadioButton gptRadioButton buttonBox buttonBox accepted() CreatePartitionTableDialog accept() 222 141 157 155 buttonBox rejected() CreatePartitionTableDialog reject() 290 147 286 155 calamares-3.2.41.1/src/modules/partition/gui/CreateVolumeGroupDialog.cpp000066400000000000000000000024121410275732300261630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CreateVolumeGroupDialog.h" #include #include #include #include #include CreateVolumeGroupDialog::CreateVolumeGroupDialog( QString& vgName, QVector< const Partition* >& selectedPVs, QVector< const Partition* > pvList, qint64& pSize, QWidget* parent ) : VolumeGroupBaseDialog( vgName, pvList, parent ) , m_selectedPVs( selectedPVs ) , m_peSize( pSize ) { setWindowTitle( tr( "Create Volume Group" ) ); peSize()->setValue( pSize ); vgType()->setEnabled( false ); } void CreateVolumeGroupDialog::accept() { QString& name = vgNameValue(); name = vgName()->text(); m_selectedPVs << checkedItems(); qint64& pe = m_peSize; pe = peSize()->value(); QDialog::accept(); } calamares-3.2.41.1/src/modules/partition/gui/CreateVolumeGroupDialog.h000066400000000000000000000015771410275732300256430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CREATEVOLUMEGROUPDIALOG_H #define CREATEVOLUMEGROUPDIALOG_H #include "gui/VolumeGroupBaseDialog.h" class CreateVolumeGroupDialog : public VolumeGroupBaseDialog { Q_OBJECT public: CreateVolumeGroupDialog( QString& vgName, QVector< const Partition* >& selectedPVs, QVector< const Partition* > pvList, qint64& pSize, QWidget* parent ); void accept() override; private: QVector< const Partition* >& m_selectedPVs; qint64& m_peSize; }; #endif // CREATEVOLUMEGROUPDIALOG_H calamares-3.2.41.1/src/modules/partition/gui/DeviceInfoWidget.cpp000066400000000000000000000131031410275732300246110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #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 #include #include DeviceInfoWidget::DeviceInfoWidget( QWidget* parent ) : QWidget( parent ) , m_ptIcon( new QLabel ) , m_ptLabel( new QLabel ) , m_tableType( PartitionTable::unknownTableType ) { QHBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); CalamaresUtils::unmarginLayout( mainLayout ); m_ptLabel->setObjectName( "deviceInfoLabel" ); m_ptIcon->setObjectName( "deviceInfoIcon" ); mainLayout->addWidget( m_ptIcon ); mainLayout->addWidget( m_ptLabel ); QSize iconSize = CalamaresUtils::defaultIconSize(); m_ptIcon->setMargin( 0 ); m_ptIcon->setFixedSize( iconSize ); m_ptIcon->setPixmap( 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( 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 ); } void DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type ) { m_tableType = type; retranslateUi(); } void DeviceInfoWidget::retranslateUi() { QString typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper(); // fix up if the name shouldn't be uppercase: switch ( m_tableType ) { case PartitionTable::msdos: case PartitionTable::msdos_sectorbased: typeString = "MBR"; 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; case PartitionTable::unknownTableType: toolTipString = tr( "This installer cannot detect a partition table on the " "selected storage device.

" "The device either has no partition " "table, or the partition table is corrupted or of an unknown " "type.
" "This installer can create a new partition table for you, " "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." ); 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." ); } 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." ) ); } calamares-3.2.41.1/src/modules/partition/gui/DeviceInfoWidget.h000066400000000000000000000013651410275732300242650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DEVICEINFOWIDGET_H #define DEVICEINFOWIDGET_H #include #include class QLabel; class DeviceInfoWidget : public QWidget { Q_OBJECT public: explicit DeviceInfoWidget( QWidget* parent = nullptr ); void setPartitionTableType( PartitionTable::TableType type ); public slots: void retranslateUi(); private: QLabel* m_ptIcon; QLabel* m_ptLabel; PartitionTable::TableType m_tableType; }; #endif // DEVICEINFOWIDGET_H calamares-3.2.41.1/src/modules/partition/gui/EditExistingPartitionDialog.cpp000066400000000000000000000267701410275732300270620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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. * * Calamares is Free Software: see the License-Identifier above. * */ #include "EditExistingPartitionDialog.h" #include "ui_EditExistingPartitionDialog.h" #include "core/ColorUtils.h" #include "core/PartUtils.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "gui/PartitionDialogHelpers.h" #include "gui/PartitionSizeController.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #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 ) : QDialog( parentWidget ) , m_ui( new Ui_EditExistingPartitionDialog ) , m_device( device ) , m_partition( partition ) , m_partitionSizeController( new PartitionSizeController( this ) ) , m_usedMountPoints( usedMountPoints ) { m_ui->setupUi( this ); 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 ); // 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, [this]( bool doFormat ) { replacePartResizerWidget(); m_ui->fileSystemLabel->setEnabled( doFormat ); m_ui->fileSystemComboBox->setEnabled( doFormat ); if ( !doFormat ) { m_ui->fileSystemComboBox->setCurrentText( userVisibleFS( m_partition->fileSystem() ) ); } 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 } } m_ui->fileSystemComboBox->addItems( fsNames ); FileSystem::Type defaultFSType; QString untranslatedFSName = PartUtils::canonicalFilesystemName( Calamares::JobQueue::instance()->globalStorage()->value( "defaultFileSystemType" ).toString(), &defaultFSType ); if ( defaultFSType == FileSystem::Type::Unknown ) { defaultFSType = FileSystem::Type::Ext4; } 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 ) ); } EditExistingPartitionDialog::~EditExistingPartitionDialog() {} PartitionTable::Flags EditExistingPartitionDialog::newFlags() const { return flagsFromList( *( m_ui->m_listFlags ) ); } void EditExistingPartitionDialog::applyChanges( PartitionCoreModule* core ) { 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(); 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() ); } 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, 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, resultFlags ); } else { core->resizePartition( m_device, m_partition, newFirstSector, newLastSector ); if ( currentFlags != resultFlags ) { core->setPartitionFlags( m_device, m_partition, resultFlags ); } } } else { // No size changes if ( m_ui->formatRadioButton->isChecked() ) { // if the FS type is unchanged, we just format if ( m_partition->fileSystem().type() == fsType ) { core->formatPartition( m_device, m_partition ); 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 { 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, 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 ); } } } void EditExistingPartitionDialog::replacePartResizerWidget() { /* * There is no way to reliably update the partition used by * PartResizerWidget, which is necessary when we switch between "format" and * "keep". This is a hack which replaces the existing PartResizerWidget * with a new one. */ PartResizerWidget* widget = new PartResizerWidget( this ); layout()->replaceWidget( m_ui->partResizerWidget, widget ); delete m_ui->partResizerWidget; m_ui->partResizerWidget = widget; m_partitionSizeController->setPartResizerWidget( widget, m_ui->formatRadioButton->isChecked() ); } void EditExistingPartitionDialog::updateMountPointPicker() { bool doFormat = m_ui->formatRadioButton->isChecked(); FileSystem::Type fsType = FileSystem::Unknown; if ( doFormat ) { fsType = FileSystem::typeForName( m_ui->fileSystemComboBox->currentText() ); } else { 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 ) { canMount = false; } m_ui->mountPointLabel->setEnabled( canMount ); m_ui->mountPointComboBox->setEnabled( canMount ); if ( !canMount ) { setSelectedMountPoint( m_ui->mountPointComboBox, QString() ); } } void EditExistingPartitionDialog::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 ); } } calamares-3.2.41.1/src/modules/partition/gui/EditExistingPartitionDialog.h000066400000000000000000000032501410275732300265130ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef EDITEXISTINGPARTITIONDIALOG_H #define EDITEXISTINGPARTITIONDIALOG_H #include #include #include class PartitionCoreModule; class Device; class Partition; class PartitionSizeController; class Ui_EditExistingPartitionDialog; /** * The dialog which is shown to edit a partition which already existed when the installer started. * * It lets you decide how to reuse the partition: whether to keep its content * or reformat it, whether to resize or move it. */ class EditExistingPartitionDialog : public QDialog { Q_OBJECT public: EditExistingPartitionDialog( Device* device, Partition* partition, const QStringList& usedMountPoints, QWidget* parentWidget = nullptr ); ~EditExistingPartitionDialog() override; void applyChanges( PartitionCoreModule* module ); private slots: void checkMountPointSelection(); private: QScopedPointer< Ui_EditExistingPartitionDialog > m_ui; Device* m_device; Partition* m_partition; PartitionSizeController* m_partitionSizeController; QStringList m_usedMountPoints; PartitionTable::Flags newFlags() const; void replacePartResizerWidget(); void updateMountPointPicker(); }; #endif /* EDITEXISTINGPARTITIONDIALOG_H */ calamares-3.2.41.1/src/modules/partition/gui/EditExistingPartitionDialog.ui000066400000000000000000000162121410275732300267030ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> SPDX-License-Identifier: GPL-3.0-or-later EditExistingPartitionDialog 0 0 450 615 0 0 Edit Existing Partition QLayout::SetMinimumSize 0 0 0 59 QFormLayout::ExpandingFieldsGrow Content: keepRadioButton &Keep true Format 0 0 300 0 Warning: Formatting the partition will erase all existing data. true &Mount Point: mountPointComboBox true -1 Si&ze: sizeSpinBox MiB Fi&le System: fileSystemComboBox Flags: true QAbstractItemView::NoSelection true 150 16777215 Label for the filesystem 16 FS Label: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok PartResizerWidget QWidget
kpmcore/gui/partresizerwidget.h
1
sizeSpinBox keepRadioButton formatRadioButton mountPointComboBox buttonBox buttonBox accepted() EditExistingPartitionDialog accept() 248 254 157 274 buttonBox rejected() EditExistingPartitionDialog reject() 316 260 286 274
calamares-3.2.41.1/src/modules/partition/gui/EncryptWidget.cpp000066400000000000000000000102031410275732300242200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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 "EncryptWidget.h" #include "ui_EncryptWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" EncryptWidget::EncryptWidget( QWidget* parent ) : QWidget( parent ) , m_ui( new Ui::EncryptWidget ) , m_state( Encryption::Disabled ) { m_ui->setupUi( this ); m_ui->m_iconLabel->setFixedWidth( m_ui->m_iconLabel->height() ); m_ui->m_passphraseLineEdit->hide(); m_ui->m_confirmLineEdit->hide(); m_ui->m_iconLabel->hide(); connect( m_ui->m_encryptCheckBox, &QCheckBox::stateChanged, this, &EncryptWidget::onCheckBoxStateChanged ); connect( m_ui->m_passphraseLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); connect( m_ui->m_confirmLineEdit, &QLineEdit::textEdited, this, &EncryptWidget::onPassphraseEdited ); setFixedHeight( m_ui->m_passphraseLineEdit->height() ); // Avoid jumping up and down updateState(); CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ); } void EncryptWidget::reset() { m_ui->m_passphraseLineEdit->clear(); m_ui->m_confirmLineEdit->clear(); m_ui->m_encryptCheckBox->setChecked( false ); } EncryptWidget::Encryption EncryptWidget::state() const { return m_state; } void EncryptWidget::setText( const QString& text ) { m_ui->m_encryptCheckBox->setText( text ); } QString EncryptWidget::passphrase() const { if ( m_state == Encryption::Confirmed ) { return m_ui->m_passphraseLineEdit->text(); } return QString(); } void EncryptWidget::retranslate() { m_ui->retranslateUi( this ); onPassphraseEdited(); // For the tooltip } ///@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_passphraseLineEdit->text().isEmpty() && m_ui->m_passphraseLineEdit->text() == m_ui->m_confirmLineEdit->text() ) { newState = Encryption::Confirmed; } else { newState = Encryption::Unconfirmed; } } else { newState = Encryption::Disabled; } if ( newState != m_state ) { m_state = newState; Q_EMIT stateChanged( m_state ); } } void EncryptWidget::onPassphraseEdited() { if ( !m_ui->m_iconLabel->isVisible() ) { m_ui->m_iconLabel->show(); } updateState(); } void EncryptWidget::onCheckBoxStateChanged( int checked ) { // @p checked is a Qt::CheckState, 0 is "unchecked" and 2 is "checked" m_ui->m_passphraseLineEdit->setVisible( checked ); m_ui->m_confirmLineEdit->setVisible( checked ); m_ui->m_iconLabel->setVisible( checked ); m_ui->m_passphraseLineEdit->clear(); m_ui->m_confirmLineEdit->clear(); m_ui->m_iconLabel->clear(); updateState(); } calamares-3.2.41.1/src/modules/partition/gui/EncryptWidget.h000066400000000000000000000020461410275732300236730ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 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. * */ #ifndef ENCRYPTWIDGET_H #define ENCRYPTWIDGET_H #include namespace Ui { class EncryptWidget; } class EncryptWidget : public QWidget { Q_OBJECT public: enum class Encryption : unsigned short { Disabled = 0, Unconfirmed, Confirmed }; explicit EncryptWidget( QWidget* parent = nullptr ); void reset(); Encryption state() const; void setText( const QString& text ); QString passphrase() const; void retranslate(); signals: void stateChanged( Encryption ); private: void updateState(); void onPassphraseEdited(); void onCheckBoxStateChanged( int checked ); Ui::EncryptWidget* m_ui; Encryption m_state; }; #endif // ENCRYPTWIDGET_H calamares-3.2.41.1/src/modules/partition/gui/EncryptWidget.ui000066400000000000000000000034321410275732300240610ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2016 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later EncryptWidget 0 0 822 59 Form 0 0 0 0 En&crypt system QLineEdit::Password Passphrase QLineEdit::Password Confirm passphrase Qt::AlignCenter calamares-3.2.41.1/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.cpp000066400000000000000000000015361410275732300272240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ListPhysicalVolumeWidgetItem.h" #include ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ) : QListWidgetItem( QString( "%1 | %2" ).arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ) ) ) , m_partition( partition ) { setToolTip( partition->deviceNode() ); setSizeHint( QSize( 0, 32 ) ); setCheckState( checked ? Qt::Checked : Qt::Unchecked ); } const Partition* ListPhysicalVolumeWidgetItem::partition() const { return m_partition; } calamares-3.2.41.1/src/modules/partition/gui/ListPhysicalVolumeWidgetItem.h000066400000000000000000000012741410275732300266700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef LISTPHYSICALVOLUMEWIDGETITEM_H #define LISTPHYSICALVOLUMEWIDGETITEM_H #include #include class ListPhysicalVolumeWidgetItem : public QListWidgetItem { public: ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked ); const Partition* partition() const; private: const Partition* m_partition; }; #endif // LISTPHYSICALVOLUMEWIDGETITEM_H calamares-3.2.41.1/src/modules/partition/gui/PartitionBarsView.cpp000066400000000000000000000377721410275732300250700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "gui/PartitionBarsView.h" #include "core/ColorUtils.h" #include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include #include #include #include #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 constexpr int CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); // The SELECTION_MARGIN is applied within a hardcoded 2px padding anyway, so // we start from EXTENDED_PARTITION_MARGIN - 2 in all cases. // Then we try to ensure the selection rectangle fits exactly between the extended // rectangle and the outer frame (the "/ 2" part), unless that's not possible, and in // that case we at least make sure we have a 1px gap between the selection rectangle // 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 ); PartitionBarsView::PartitionBarsView( QWidget* parent ) : QAbstractItemView( parent ) , m_nestedPartitionsMode( NoNestedPartitions ) , canBeSelected( []( const QModelIndex& ) { return true; } ) , m_hoveredIndex( QModelIndex() ) { 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(); } ); setMouseTracking( true ); } PartitionBarsView::~PartitionBarsView() {} void PartitionBarsView::setNestedPartitionsMode( PartitionBarsView::NestedPartitionsMode mode ) { m_nestedPartitionsMode = mode; viewport()->repaint(); } QSize PartitionBarsView::minimumSizeHint() const { return sizeHint(); } QSize PartitionBarsView::sizeHint() const { return QSize( -1, VIEW_HEIGHT ); } void PartitionBarsView::paintEvent( QPaintEvent* event ) { QPainter painter( viewport() ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); QRect partitionsRect = rect(); partitionsRect.setHeight( VIEW_HEIGHT ); painter.save(); drawPartitions( &painter, partitionsRect, QModelIndex() ); painter.restore(); } 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; QRect rect = rect_; const int y = rect.y(); const int height = rect.height(); const int radius = qMax( 1, CORNER_RADIUS - ( VIEW_HEIGHT - height ) / 2 ); painter->setClipRect( x, y, width, height ); painter->translate( 0.5, 0.5 ); rect.adjust( 0, 0, -1, -1 ); 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 { painter->setBrush( color ); } QColor borderColor = color.darker(); painter->setPen( borderColor ); painter->drawRoundedRect( rect, radius, radius ); // Draw shade if ( !isFreeSpace ) { rect.adjust( 2, 2, -2, -2 ); } QLinearGradient gradient( 0, 0, 0, height / 2 ); qreal c = isFreeSpace ? 0 : 1; gradient.setColorAt( 0, QColor::fromRgbF( c, c, c, 0.3 ) ); gradient.setColorAt( 1, QColor::fromRgbF( c, c, c, 0 ) ); painter->setPen( Qt::NoPen ); painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); if ( selectionMode() != QAbstractItemView::NoSelection && index.isValid() && selectionModel() && !selectionModel()->selectedIndexes().isEmpty() && selectionModel()->selectedIndexes().first() == index ) { painter->setPen( QPen( borderColor, 1 ) ); QColor highlightColor = QPalette().highlight().color(); highlightColor = highlightColor.lighter( 500 ); highlightColor.setAlpha( 120 ); painter->setBrush( highlightColor ); QRect selectionRect = rect; selectionRect.setX( x + 1 ); selectionRect.setWidth( width - 3 ); //account for the previous rect.adjust 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 ); } selectionRect.adjust( SELECTION_MARGIN, SELECTION_MARGIN, -SELECTION_MARGIN, -SELECTION_MARGIN ); painter->drawRoundedRect( selectionRect, radius - 1, radius - 1 ); } painter->translate( -0.5, -0.5 ); } void PartitionBarsView::drawPartitions( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) { return; } const int totalWidth = rect.width(); auto pair = computeItemsVector( parent ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { 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 { width = rect.right() - x + 1; } drawSection( painter, rect, x, width, 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 ); drawPartitions( painter, subRect, item.index ); } x += width; } if ( !items.count() && !modl->device()->partitionTable() ) // No disklabel or unknown { int width = rect.right() - rect.x() + 1; drawSection( painter, rect, rect.x(), width, QModelIndex() ); } } QModelIndex PartitionBarsView::indexAt( const QPoint& point ) const { return indexAt( point, rect(), QModelIndex() ); } QModelIndex 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 ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { 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 { 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 ) ) { 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 ) ) { return indexAt( point, subRect, item.index ); } return item.index; } else // contains but no children, we win { return item.index; } } x += width; } return QModelIndex(); } QRect PartitionBarsView::visualRect( const QModelIndex& index ) const { return visualRect( index, rect(), QModelIndex() ); } QRect 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 ); QVector< PartitionBarsView::Item >& items = pair.first; qreal& total = pair.second; int x = rect.x(); for ( int row = 0; row < items.count(); ++row ) { 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 { 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 ); QRect candidateVisualRect = visualRect( index, subRect, item.index ); if ( !candidateVisualRect.isNull() ) { return candidateVisualRect; } } x += width; } return QRect(); } QRegion PartitionBarsView::visualRegionForSelection( const QItemSelection& selection ) const { return QRegion(); } int PartitionBarsView::horizontalOffset() const { return 0; } int PartitionBarsView::verticalOffset() const { return 0; } void PartitionBarsView::scrollTo( const QModelIndex& index, ScrollHint hint ) { Q_UNUSED( index ) Q_UNUSED( hint ) } void PartitionBarsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } void PartitionBarsView::setSelectionFilter( std::function< bool( const QModelIndex& ) > canBeSelected ) { this->canBeSelected = canBeSelected; } QModelIndex PartitionBarsView::moveCursor( CursorAction, Qt::KeyboardModifiers ) { return QModelIndex(); } bool PartitionBarsView::isIndexHidden( const QModelIndex& ) const { return false; } void PartitionBarsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) { //HACK: this is an utterly awful workaround, which is unfortunately necessary. // QAbstractItemView::mousePressedEvent calls setSelection, but before that, // for some mental reason, it works under the assumption that every item is a // rectangle. This rectangle is provided by visualRect, and the idea mostly // works, except when the item is an extended partition item, which is of course // a rectangle with a rectangular hole in the middle. // QAbstractItemView::mousePressEvent builds a QRect with x1, y1 in the center // of said visualRect, and x2, y2 in the real QMouseEvent position. // This may very well yield a QRect with negative size, which is meaningless. // Therefore the QRect we get here is totally bogus, and its topLeft is outside // the actual area of the item we need. // What we need are the real coordinates of the QMouseEvent, and the only way to // get them is by fetching the private x2, y2 from the rect. // TL;DR: this sucks, look away. -- Teo 12/2015 int x1, y1, x2, y2; rect.getCoords( &x1, &y1, &x2, &y2 ); QModelIndex eventIndex = indexAt( QPoint( x2, y2 ) ); if ( canBeSelected( eventIndex ) ) { selectionModel()->select( eventIndex, flags ); } viewport()->repaint(); } void PartitionBarsView::mouseMoveEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); QPersistentModelIndex oldHoveredIndex = m_hoveredIndex; if ( candidateIndex.isValid() ) { m_hoveredIndex = candidateIndex; } else { m_hoveredIndex = QModelIndex(); QGuiApplication::restoreOverrideCursor(); } if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !canBeSelected( m_hoveredIndex ) ) { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); } else { QGuiApplication::restoreOverrideCursor(); } viewport()->repaint(); } } void PartitionBarsView::leaveEvent( QEvent* ) { QGuiApplication::restoreOverrideCursor(); if ( m_hoveredIndex.isValid() ) { m_hoveredIndex = QModelIndex(); viewport()->repaint(); } } void 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 } QPair< QVector< PartitionBarsView::Item >, qreal > PartitionBarsView::computeItemsVector( const QModelIndex& parent ) const { int count = model()->rowCount( parent ); QVector< PartitionBarsView::Item > items; qreal total = 0; for ( int row = 0; row < count; ++row ) { QModelIndex index = model()->index( row, 0, parent ); if ( m_nestedPartitionsMode == NoNestedPartitions && model()->hasChildren( index ) ) { QPair< QVector< PartitionBarsView::Item >, qreal > childVect = computeItemsVector( index ); items += childVect.first; total += childVect.second; } else { qreal size = index.data( PartitionModel::SizeRole ).toLongLong(); total += size; items.append( { size, index } ); } } count = items.count(); // The sizes we have are perfect, but now we have to hardcode a minimum size for small // partitions and compensate for it in the total. 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%. adjustedTotal -= items[ row ].size; items[ row ].size = 0.01 * total; adjustedTotal += items[ row ].size; } } return qMakePair( items, adjustedTotal ); } calamares-3.2.41.1/src/modules/partition/gui/PartitionBarsView.h000066400000000000000000000061211410275732300245150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONPREVIEW_H #define PARTITIONPREVIEW_H #include "PartitionViewSelectionFilter.h" #include /** * A Qt model view which displays the partitions inside a device as a colored bar. * * It has been created to be used with a PartitionModel instance, but does not * call any PartitionModel-specific methods: it should be usable with other * models as long as they provide the same roles PartitionModel provides. */ class PartitionBarsView : public QAbstractItemView { Q_OBJECT public: enum NestedPartitionsMode { NoNestedPartitions = 0, DrawNestedPartitions }; explicit PartitionBarsView( QWidget* parent = nullptr ); ~PartitionBarsView() override; void setNestedPartitionsMode( NestedPartitionsMode mode ); QSize minimumSizeHint() const override; QSize sizeHint() const override; void paintEvent( QPaintEvent* event ) override; // QAbstractItemView API QModelIndex indexAt( const QPoint& point ) const override; QRect visualRect( const QModelIndex& index ) const override; void scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible ) override; void setSelectionModel( QItemSelectionModel* selectionModel ) override; void setSelectionFilter( SelectionFilter canBeSelected ); protected: // QAbstractItemView API QRegion visualRegionForSelection( const QItemSelection& selection ) const override; int horizontalOffset() const override; int verticalOffset() const override; bool isIndexHidden( const QModelIndex& index ) const override; QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) override; void setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) override; void mouseMoveEvent( QMouseEvent* event ) override; void leaveEvent( QEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; protected slots: void updateGeometries() override; private: void drawPartitions( QPainter* painter, const QRect& rect, const QModelIndex& parent ); void drawSection( QPainter* painter, const QRect& rect_, int x, int width, const QModelIndex& index ); QModelIndex indexAt( const QPoint& point, const QRect& rect, const QModelIndex& parent ) const; QRect visualRect( const QModelIndex& index, const QRect& rect, const QModelIndex& parent ) const; NestedPartitionsMode m_nestedPartitionsMode; SelectionFilter canBeSelected; struct Item { qreal size; QModelIndex index; }; inline QPair< QVector< Item >, qreal > computeItemsVector( const QModelIndex& parent ) const; QPersistentModelIndex m_hoveredIndex; }; #endif /* PARTITIONPREVIEW_H */ calamares-3.2.41.1/src/modules/partition/gui/PartitionDialogHelpers.cpp000066400000000000000000000056511410275732300260570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-FileCopyrightText: 2018-2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PartitionDialogHelpers.h" #include "core/PartUtils.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/Logger.h" #include #include QStringList standardMountPoints() { QStringList mountPoints { "/", "/home", "/opt", "/srv", "/usr", "/var" }; if ( PartUtils::isEfiSystem() ) { mountPoints << Calamares::JobQueue::instance()->globalStorage()->value( "efiSystemPartition" ).toString(); } else { mountPoints << QStringLiteral( "/boot" ); } mountPoints.removeDuplicates(); mountPoints.sort(); return mountPoints; } void standardMountPoints( QComboBox& combo ) { combo.clear(); combo.addItem( QObject::tr( "(no mount point)" ) ); combo.addItems( standardMountPoints() ); } void standardMountPoints( QComboBox& combo, const QString& selected ) { standardMountPoints( combo ); setSelectedMountPoint( combo, selected ); } QString selectedMountPoint( QComboBox& combo ) { if ( combo.currentIndex() == 0 ) { return QString(); } return combo.currentText(); } void setSelectedMountPoint( QComboBox& combo, const QString& selected ) { if ( selected.isEmpty() ) { combo.setCurrentIndex( 0 ); // (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 ); } } PartitionTable::Flags 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() ); } } return flags; } void setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable::Flags checked ) { int f = 1; QString s; while ( !( s = PartitionTable::flagName( static_cast< PartitionTable::Flag >( f ) ) ).isEmpty() ) { if ( available & f ) { QListWidgetItem* item = new QListWidgetItem( s ); list.addItem( item ); item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled ); item->setData( Qt::UserRole, f ); item->setCheckState( ( checked & f ) ? Qt::Checked : Qt::Unchecked ); } f <<= 1; } } calamares-3.2.41.1/src/modules/partition/gui/PartitionDialogHelpers.h000066400000000000000000000037371410275732300255270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITION_GUI_PARTITIONDIALOGHELPERS #define PARTITION_GUI_PARTITIONDIALOGHELPERS #include #include class QComboBox; class QListWidget; /** * Returns a list of standard mount points (e.g. /, /usr, ...). * This also includes the EFI mount point if that is necessary * on the target system. */ QStringList standardMountPoints(); /** * Clears the combobox and fills it with "(no mount point)" * and the elements of standardMountPoints(), above. */ void standardMountPoints( QComboBox& ); /** * As above, but also sets the displayed mount point to @p selected, * unless it is empty, in which case "(no mount point)" is chosen. */ void standardMountPoints( QComboBox&, const QString& selected ); /** * Get the mount point selected in the combo box (which should * have been set up with standardMountPoints(), above); this * will map the topmost item (i.e. "(no mount point)") back * to blank, to allow easy detection of no-mount-selected. */ QString selectedMountPoint( QComboBox& 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 ); } /** * Get the flags that have been checked in the list widget. */ PartitionTable::Flags flagsFromList( const QListWidget& list ); void setFlagList( QListWidget& list, PartitionTable::Flags available, PartitionTable::Flags checked ); #endif calamares-3.2.41.1/src/modules/partition/gui/PartitionLabelsView.cpp000066400000000000000000000414121410275732300253650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PartitionLabelsView.h" #include "core/ColorUtils.h" #include "core/PartitionModel.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include // Qt #include #include #include 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 LABELS_MARGIN = LABEL_PARTITION_SQUARE_MARGIN; static const int CORNER_RADIUS = 2; static QStringList buildUnknownDisklabelTexts( Device* dev ) { QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ), KFormat().formatByteSize( dev->totalLogical() * dev->logicalSize() ) }; return texts; } PartitionLabelsView::PartitionLabelsView( QWidget* parent ) : QAbstractItemView( parent ) , m_canBeSelected( []( const QModelIndex& ) { return true; } ) , m_extendedPartitionHidden( false ) { setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); setFrameStyle( QFrame::NoFrame ); setSelectionBehavior( QAbstractItemView::SelectRows ); setSelectionMode( QAbstractItemView::SingleSelection ); this->setObjectName( "partitionLabel" ); setMouseTracking( true ); } PartitionLabelsView::~PartitionLabelsView() {} QSize PartitionLabelsView::minimumSizeHint() const { return sizeHint(); } QSize PartitionLabelsView::sizeHint() const { QAbstractItemModel* modl = model(); if ( modl ) { return QSize( -1, LAYOUT_MARGIN + sizeForAllLabels( rect().width() ).height() ); } return QSize(); } void PartitionLabelsView::paintEvent( QPaintEvent* event ) { Q_UNUSED( event ) QPainter painter( viewport() ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); QRect lRect = labelsRect(); drawLabels( &painter, lRect, QModelIndex() ); } QRect PartitionLabelsView::labelsRect() const { return rect().adjusted( 0, LAYOUT_MARGIN, 0, 0 ); } static void drawPartitionSquare( QPainter* painter, const QRect& rect, const QBrush& brush ) { painter->fillRect( rect.adjusted( 1, 1, -1, -1 ), brush ); painter->setRenderHint( QPainter::Antialiasing, true ); painter->setPen( QPalette().shadow().color() ); painter->translate( .5, .5 ); painter->drawRoundedRect( rect.adjusted( 0, 0, -1, -1 ), CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -.5, -.5 ); } static void drawSelectionSquare( QPainter* painter, const QRect& rect, const QBrush& brush ) { painter->save(); painter->setPen( QPen( brush.color().darker(), 1 ) ); QColor highlightColor = QPalette().highlight().color(); highlightColor = highlightColor.lighter( 500 ); highlightColor.setAlpha( 120 ); painter->setBrush( highlightColor ); painter->translate( .5, .5 ); painter->drawRoundedRect( rect.adjusted( 0, 0, -1, -1 ), CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -.5, -.5 ); painter->restore(); } QModelIndexList PartitionLabelsView::getIndexesToDraw( const QModelIndex& parent ) const { QModelIndexList list; QAbstractItemModel* modl = model(); if ( !modl ) { return list; } for ( int row = 0; row < modl->rowCount( parent ); ++row ) { QModelIndex index = modl->index( row, 0, parent ); //HACK: horrible special casing follows. // 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 ) { continue; } if ( !modl->hasChildren( index ) || !m_extendedPartitionHidden ) { list.append( index ); } if ( modl->hasChildren( index ) ) { list.append( getIndexesToDraw( index ) ); } } return list; } QStringList PartitionLabelsView::buildTexts( const QModelIndex& index ) const { QString firstLine, secondLine; if ( index.data( PartitionModel::IsPartitionNewRole ).toBool() ) { QString label = index.data( PartitionModel::FileSystemLabelRole ).toString(); if ( !label.isEmpty() ) { firstLine = label; } else { QString mountPoint = index.sibling( index.row(), PartitionModel::MountPointColumn ).data().toString(); if ( mountPoint == "/" ) { 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 ) { 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/" } } 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(); } 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() ); return { firstLine, secondLine }; } void PartitionLabelsView::drawLabels( QPainter* painter, const QRect& rect, const QModelIndex& parent ) { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) { return; } const QModelIndexList indexesToDraw = getIndexesToDraw( parent ); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); QColor labelColor = index.data( Qt::DecorationRole ).value< QColor >(); 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 ) { painter->save(); QRect labelRect( QPoint( label_x, label_y ), labelSize ); 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 ) ); painter->setPen( Qt::NoPen ); painter->drawRoundedRect( hoverRect, CORNER_RADIUS, CORNER_RADIUS ); painter->translate( -0.5, -0.5 ); painter->restore(); } // Is this element the selected one? 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 { QStringList texts = buildUnknownDisklabelTexts( modl->device() ); QColor labelColor = ColorUtils::unknownDisklabelColor(); drawLabel( painter, texts, labelColor, QPoint( rect.x(), rect.y() ), false /*can't be selected*/ ); } } QSize PartitionLabelsView::sizeForAllLabels( int maxLineWidth ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) { return QSize(); } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); int lineLength = 0; int numLines = 1; int singleLabelHeight = 0; for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); if ( lineLength + labelSize.width() > maxLineWidth ) { numLines++; lineLength = labelSize.width(); } else { lineLength += LABELS_MARGIN + labelSize.width(); } singleLabelHeight = qMax( singleLabelHeight, labelSize.height() ); } if ( !modl->rowCount() && !modl->device()->partitionTable() ) // Unknown or no disklabel { singleLabelHeight = sizeForLabel( buildUnknownDisklabelTexts( modl->device() ) ).height(); } int totalHeight = numLines * singleLabelHeight + ( numLines - 1 ) * singleLabelHeight / 4; //spacings return QSize( maxLineWidth, totalHeight ); } QSize PartitionLabelsView::sizeForLabel( const QStringList& text ) const { int vertOffset = 0; int width = 0; for ( const QString& textLine : text ) { QSize textSize = fontMetrics().size( Qt::TextSingleLine, textLine ); vertOffset += textSize.height(); width = qMax( width, textSize.width() ); } width += LABEL_PARTITION_SQUARE_MARGIN; //for the color square return QSize( width, vertOffset ); } void PartitionLabelsView::drawLabel( QPainter* painter, const QStringList& text, const QColor& color, const QPoint& pos, bool selected ) { painter->setPen( Qt::black ); int vertOffset = 0; int width = 0; 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 ); 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 ); drawPartitionSquare( painter, partitionSquareRect, color ); if ( selected ) { drawSelectionSquare( painter, partitionSquareRect.adjusted( 2, 2, -2, -2 ), color ); } painter->setPen( Qt::black ); } QModelIndex PartitionLabelsView::indexAt( const QPoint& point ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) { return QModelIndex(); } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); QRect rect = this->rect(); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); if ( label_x + labelSize.width() > rect.width() ) //wrap to new line if overflow { label_x = rect.x(); label_y += labelSize.height() + labelSize.height() / 4; } QRect labelRect( QPoint( label_x, label_y ), labelSize ); if ( labelRect.contains( point ) ) { return index; } label_x += labelSize.width() + LABELS_MARGIN; } return QModelIndex(); } QRect PartitionLabelsView::visualRect( const QModelIndex& idx ) const { PartitionModel* modl = qobject_cast< PartitionModel* >( model() ); if ( !modl ) { return QRect(); } const QModelIndexList indexesToDraw = getIndexesToDraw( QModelIndex() ); QRect rect = this->rect(); int label_x = rect.x(); int label_y = rect.y(); for ( const QModelIndex& index : indexesToDraw ) { QStringList texts = buildTexts( index ); QSize labelSize = sizeForLabel( texts ); 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; } return QRect(); } QRegion PartitionLabelsView::visualRegionForSelection( const QItemSelection& selection ) const { Q_UNUSED( selection ) return QRegion(); } int PartitionLabelsView::horizontalOffset() const { return 0; } int PartitionLabelsView::verticalOffset() const { return 0; } void PartitionLabelsView::scrollTo( const QModelIndex& index, ScrollHint hint ) { Q_UNUSED( index ) Q_UNUSED( hint ) } void PartitionLabelsView::setCustomNewRootLabel( const QString& text ) { m_customNewRootLabel = text; viewport()->repaint(); } void PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel ) { QAbstractItemView::setSelectionModel( selectionModel ); connect( selectionModel, &QItemSelectionModel::selectionChanged, this, [=] { viewport()->repaint(); } ); } void PartitionLabelsView::setSelectionFilter( SelectionFilter canBeSelected ) { m_canBeSelected = canBeSelected; } void PartitionLabelsView::setExtendedPartitionHidden( bool hidden ) { m_extendedPartitionHidden = hidden; } QModelIndex PartitionLabelsView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) { Q_UNUSED( cursorAction ) Q_UNUSED( modifiers ) return QModelIndex(); } bool PartitionLabelsView::isIndexHidden( const QModelIndex& index ) const { Q_UNUSED( index ) return false; } void PartitionLabelsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) { QModelIndex eventIndex = indexAt( rect.topLeft() ); if ( m_canBeSelected( eventIndex ) ) { selectionModel()->select( eventIndex, flags ); } } void PartitionLabelsView::mouseMoveEvent( QMouseEvent* event ) { QModelIndex candidateIndex = indexAt( event->pos() ); QPersistentModelIndex oldHoveredIndex = m_hoveredIndex; if ( candidateIndex.isValid() ) { m_hoveredIndex = candidateIndex; } else { m_hoveredIndex = QModelIndex(); QGuiApplication::restoreOverrideCursor(); } if ( oldHoveredIndex != m_hoveredIndex ) { if ( m_hoveredIndex.isValid() && !m_canBeSelected( m_hoveredIndex ) ) { QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor ); } else { QGuiApplication::restoreOverrideCursor(); } viewport()->repaint(); } } void PartitionLabelsView::leaveEvent( QEvent* event ) { Q_UNUSED( event ) QGuiApplication::restoreOverrideCursor(); if ( m_hoveredIndex.isValid() ) { m_hoveredIndex = QModelIndex(); viewport()->repaint(); } } void 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 } calamares-3.2.41.1/src/modules/partition/gui/PartitionLabelsView.h000066400000000000000000000057121410275732300250350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONLABELSVIEW_H #define PARTITIONLABELSVIEW_H #include "PartitionViewSelectionFilter.h" #include /** * A Qt model view which displays colored labels for partitions. * * It has been created to be used with a PartitionModel instance, but does not * call any PartitionModel-specific methods: it should be usable with other * models as long as they provide the same roles PartitionModel provides. */ class PartitionLabelsView : public QAbstractItemView { Q_OBJECT public: explicit PartitionLabelsView( QWidget* parent = nullptr ); ~PartitionLabelsView() override; QSize minimumSizeHint() const override; QSize sizeHint() const override; void paintEvent( QPaintEvent* event ) override; // QAbstractItemView API QModelIndex indexAt( const QPoint& point ) const override; QRect visualRect( const QModelIndex& idx ) const override; void scrollTo( const QModelIndex& index, ScrollHint hint = EnsureVisible ) override; void setCustomNewRootLabel( const QString& text ); void setSelectionModel( QItemSelectionModel* selectionModel ) override; void setSelectionFilter( SelectionFilter canBeSelected ); void setExtendedPartitionHidden( bool hidden ); protected: // QAbstractItemView API QRegion visualRegionForSelection( const QItemSelection& selection ) const override; int horizontalOffset() const override; int verticalOffset() const override; bool isIndexHidden( const QModelIndex& index ) const override; QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers ) override; void setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags ) override; void mouseMoveEvent( QMouseEvent* event ) override; void leaveEvent( QEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; protected slots: void updateGeometries() override; private: QRect labelsRect() const; 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 ); QModelIndexList getIndexesToDraw( const QModelIndex& parent ) const; QStringList buildTexts( const QModelIndex& index ) const; SelectionFilter m_canBeSelected; bool m_extendedPartitionHidden; QString m_customNewRootLabel; QPersistentModelIndex m_hoveredIndex; }; #endif // PARTITIONLABELSVIEW_H calamares-3.2.41.1/src/modules/partition/gui/PartitionPage.cpp000066400000000000000000000547411410275732300242150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PartitionPage.h" // 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 "gui/CreatePartitionDialog.h" #include "gui/CreateVolumeGroupDialog.h" #include "gui/EditExistingPartitionDialog.h" #include "gui/ResizeVolumeGroupDialog.h" #include "gui/ScanningDialog.h" #include "ui_CreatePartitionTableDialog.h" #include "ui_PartitionPage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "Branding.h" // KPMcore #include #include #ifdef WITH_KPMCORE4API #include #endif #include #include // Qt #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_isEfi( false ) { m_isEfi = PartUtils::isEfiSystem(); m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( 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; m_ui->partitionBarsView->setNestedPartitionsMode( mode ); updateButtons(); updateBootLoaderInstallPath(); updateFromCurrentDevice(); connect( m_ui->deviceComboBox, &QComboBox::currentTextChanged, this, &PartitionPage::updateFromCurrentDevice ); 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->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->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 ) { m_ui->bootLoaderComboBox->hide(); m_ui->label_3->hide(); } CALAMARES_RETRANSLATE( m_ui->retranslateUi( this ); ); } PartitionPage::~PartitionPage() {} void PartitionPage::updateButtons() { bool create = false, createTable = false, edit = false, del = false, currentDeviceIsVG = false, isDeactivable = false; bool isRemovable = false, isVGdeactivated = false; QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( index.isValid() ) { const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); bool isFree = CalamaresUtils::Partition::isPartitionFreeSpace( partition ); bool isExtended = partition->roles().has( PartitionRole::Extended ); bool isInVG = m_core->isInVG( partition ); 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 // actually remove + add. This would not work with extended partitions // because they need to be created *before* creating logical partitions // 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; } if ( m_ui->deviceComboBox->currentIndex() >= 0 ) { 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; #ifdef WITH_KPMCORE4API if ( device->type() == Device::Type::SoftwareRAID_Device && static_cast< SoftwareRAID* >( device )->status() == SoftwareRAID::Status::Inactive ) { createTable = false; create = false; } #endif } else { currentDeviceIsVG = true; LvmDevice* lvmDevice = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); isDeactivable = DeactivateVolumeGroupOperation::isDeactivatable( lvmDevice ); isRemovable = RemoveVolumeGroupOperation::isRemovable( lvmDevice ); 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->resizeVolumeGroupButton->setEnabled( currentDeviceIsVG && !isVGdeactivated ); m_ui->deactivateVolumeGroupButton->setEnabled( currentDeviceIsVG && isDeactivable && !isVGdeactivated ); m_ui->removeVolumeGroupButton->setEnabled( currentDeviceIsVG && isRemovable ); } void PartitionPage::onNewPartitionTableClicked() { QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); Q_ASSERT( index.isValid() ); Device* device = m_core->deviceModel()->deviceForIndex( index ); 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 ) { PartitionTable::TableType type = ui.mbrRadioButton->isChecked() ? PartitionTable::msdos : PartitionTable::gpt; m_core->createPartitionTable( device, type ); } delete dlg; // PartionModelReset isn't emitted after createPartitionTable, so we have to manually update // the bootLoader index after the reset. updateBootLoaderIndex(); } bool PartitionPage::checkCanCreate( Device* device ) { auto table = device->partitionTable(); 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" ), 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() ) ); return false; } return true; } else { return true; // GPT is fine } } void PartitionPage::onNewVolumeGroupClicked() { QString vgName; QVector< const Partition* > selectedPVs; qint64 peSize = 4; QVector< const Partition* > availablePVs; for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) { availablePVs << p; } QPointer< CreateVolumeGroupDialog > dlg = new CreateVolumeGroupDialog( vgName, selectedPVs, availablePVs, peSize, this ); if ( dlg->exec() == QDialog::Accepted ) { QModelIndex partitionIndex = m_ui->partitionTreeView->currentIndex(); if ( partitionIndex.isValid() ) { const PartitionModel* model = static_cast< const PartitionModel* >( partitionIndex.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( partitionIndex ); Q_ASSERT( partition ); // 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 ); Q_ASSERT( deviceIndex.isValid() ); QVariant previousIndexDeviceData = m_core->deviceModel()->data( deviceIndex, Qt::ToolTipRole ); // Creating new VG m_core->createVolumeGroup( vgName, selectedPVs, peSize ); // As createVolumeGroup method call resets deviceModel, // 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 ); updateFromCurrentDevice(); } delete dlg; } void PartitionPage::onResizeVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); QVector< const Partition* > availablePVs; QVector< const Partition* > selectedPVs; for ( const Partition* p : m_core->lvmPVs() ) if ( !m_core->isInVG( p ) ) { availablePVs << p; } QPointer< ResizeVolumeGroupDialog > dlg = new ResizeVolumeGroupDialog( device, availablePVs, selectedPVs, this ); if ( dlg->exec() == QDialog::Accepted ) { m_core->resizeVolumeGroup( device, selectedPVs ); } delete dlg; } void PartitionPage::onDeactivateVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); m_core->deactivateVolumeGroup( device ); updateFromCurrentDevice(); PartitionModel* model = m_core->partitionModelForDevice( device ); model->update(); } void PartitionPage::onRemoveVolumeGroupClicked() { QModelIndex deviceIndex = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); LvmDevice* device = dynamic_cast< LvmDevice* >( m_core->deviceModel()->deviceForIndex( deviceIndex ) ); Q_ASSERT( device && device->type() == Device::Type::LVM_Device ); m_core->removeVolumeGroup( device ); } void PartitionPage::onCreateClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); if ( !checkCanCreate( model->device() ) ) { 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 PartitionPage::onEditClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); if ( CalamaresUtils::Partition::isPartitionNew( partition ) ) { updatePartitionToCreate( model->device(), partition ); } else { editExistingPartition( model->device(), partition ); } } void PartitionPage::onDeleteClicked() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); Q_ASSERT( index.isValid() ); const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); m_core->deletePartition( model->device(), partition ); } void PartitionPage::onRevertClicked() { ScanningDialog::run( 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] { m_lastSelectedBootLoaderIndex = -1; if ( m_ui->bootLoaderComboBox->currentIndex() < 0 ) { m_ui->bootLoaderComboBox->setCurrentIndex( 0 ); } }, this ); } void PartitionPage::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) { return; } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); // Use the buttons to trigger the actions so that they do nothing if they // are disabled. Alternatively, the code could use QAction to centralize, // but I don't expect there will be other occurences of triggering the same // 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 PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) { QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( device, CreatePartitionDialog::FreshPartition { partition }, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) { Partition* newPartition = dlg->getNewlyCreatedPartition(); m_core->deletePartition( device, partition ); m_core->createPartition( device, newPartition, dlg->newFlags() ); } delete dlg; } void PartitionPage::editExistingPartition( Device* device, Partition* partition ) { QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); QPointer< EditExistingPartitionDialog > dlg = new EditExistingPartitionDialog( device, partition, mountPoints, this ); if ( dlg->exec() == QDialog::Accepted ) { dlg->applyChanges( m_core ); } delete dlg; } 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() ); } void PartitionPage::updateSelectedBootLoaderIndex() { m_lastSelectedBootLoaderIndex = m_ui->bootLoaderComboBox->currentIndex(); cDebug() << "Selected bootloader index" << m_lastSelectedBootLoaderIndex; } void PartitionPage::restoreSelectedBootLoader() { Calamares::restoreSelectedBootLoader( *( m_ui->bootLoaderComboBox ), m_core->bootLoaderInstallPath() ); } void 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 ); m_ui->partitionLabelsView->setModel( model ); m_ui->partitionTreeView->setModel( model ); 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() ) { // Tree view QItemSelectionModel* selectionModel = m_ui->partitionTreeView->selectionModel(); m_ui->partitionTreeView->setSelectionModel( m_ui->partitionBarsView->selectionModel() ); selectionModel->deleteLater(); // Labels view selectionModel = m_ui->partitionLabelsView->selectionModel(); m_ui->partitionLabelsView->setSelectionModel( m_ui->partitionBarsView->selectionModel() ); selectionModel->deleteLater(); } // 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 ); // Must be done here because we need to have a model set to define // individual column resize mode QHeaderView* header = m_ui->partitionTreeView->header(); header->setSectionResizeMode( QHeaderView::ResizeToContents ); header->setSectionResizeMode( 0, QHeaderView::Stretch ); 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( model, &QAbstractItemModel::modelReset, this, &PartitionPage::onPartitionModelReset ); } void PartitionPage::onPartitionModelReset() { m_ui->partitionTreeView->expandAll(); updateButtons(); updateBootLoaderIndex(); } void PartitionPage::updateBootLoaderIndex() { // set bootloader back to user selected index if ( m_lastSelectedBootLoaderIndex >= 0 && m_ui->bootLoaderComboBox->count() ) { m_ui->bootLoaderComboBox->setCurrentIndex( m_lastSelectedBootLoaderIndex ); } } QStringList PartitionPage::getCurrentUsedMountpoints() { 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; for ( Partition* partition : device->partitionTable()->children() ) { const QString& mountPoint = PartitionInfo::mountPoint( partition ); if ( !mountPoint.isEmpty() ) { mountPoints << mountPoint; } } return mountPoints; } int PartitionPage::selectedDeviceIndex() { return m_ui->deviceComboBox->currentIndex(); } void PartitionPage::selectDeviceByIndex( int index ) { m_ui->deviceComboBox->setCurrentIndex( index ); } calamares-3.2.41.1/src/modules/partition/gui/PartitionPage.h000066400000000000000000000047211410275732300236530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONPAGE_H #define PARTITIONPAGE_H #include #include #include class PartitionCoreModule; class Ui_PartitionPage; class Device; class Partition; /** * The user interface for the module. * * Shows the information exposed by PartitionCoreModule and asks it to schedule * jobs according to user actions. */ class PartitionPage : public QWidget { Q_OBJECT public: explicit PartitionPage( PartitionCoreModule* core, QWidget* parent = nullptr ); ~PartitionPage() override; void onRevertClicked(); int selectedDeviceIndex(); void selectDeviceByIndex( int index ); private slots: /// @brief Update everything when the base device changes void updateFromCurrentDevice(); /// @brief Update when the selected device for boot loader changes void updateBootLoaderInstallPath(); /// @brief Explicitly selected boot loader path void updateSelectedBootLoaderIndex(); /// @brief After boot loader model changes, try to preserve previously set value void restoreSelectedBootLoader(); private: QScopedPointer< Ui_PartitionPage > m_ui; PartitionCoreModule* m_core; void updateButtons(); void onNewPartitionTableClicked(); void onNewVolumeGroupClicked(); void onResizeVolumeGroupClicked(); void onDeactivateVolumeGroupClicked(); void onRemoveVolumeGroupClicked(); void onCreateClicked(); void onEditClicked(); void onDeleteClicked(); void onPartitionViewActivated(); void onPartitionModelReset(); void updatePartitionToCreate( Device*, Partition* ); void editExistingPartition( Device*, Partition* ); void updateBootLoaderIndex(); /** * @brief Check if a new partition can be created (as primary) on the device. * * Returns true if a new partition can be created on the device. Provides * a warning popup and returns false if it cannot. */ bool checkCanCreate( Device* ); QStringList getCurrentUsedMountpoints(); QMutex m_revertMutex; int m_lastSelectedBootLoaderIndex; bool m_isEfi; }; #endif // PARTITIONPAGE_H calamares-3.2.41.1/src/modules/partition/gui/PartitionPage.ui000066400000000000000000000144541410275732300240450ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> SPDX-License-Identifier: GPL-3.0-or-later PartitionPage 0 0 684 304 Form Storage de&vice: deviceComboBox Qt::Horizontal 40 20 false &Revert All Changes QAbstractItemView::NoEditTriggers false true false false New Partition &Table Qt::Horizontal 40 20 Cre&ate &Edit &Delete New Volume Group Resize Volume Group Deactivate Volume Group Remove Volume Group Qt::Vertical QSizePolicy::Fixed 20 24 I&nstall boot loader on: bootLoaderComboBox QComboBox::AdjustToContents Qt::Horizontal 40 1 PartitionBarsView QFrame
gui/PartitionBarsView.h
1
PartitionLabelsView QFrame
gui/PartitionLabelsView.h
1
deviceComboBox revertButton partitionTreeView newPartitionTableButton createButton editButton deleteButton bootLoaderComboBox
calamares-3.2.41.1/src/modules/partition/gui/PartitionSizeController.cpp000066400000000000000000000142261410275732300263110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "gui/PartitionSizeController.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "utils/Units.h" // Qt #include // KPMcore #include #include // stdc++ #include PartitionSizeController::PartitionSizeController( QObject* parent ) : QObject( parent ) { } void PartitionSizeController::init( Device* device, Partition* partition, const QColor& color ) { m_device = device; m_originalPartition = partition; // PartResizerWidget stores its changes directly in the partition it is // initialized with. We don't want the changes to be committed that way, // because it means we would have to revert them if the user cancel the // dialog the widget is in. Therefore we init PartResizerWidget with a clone // of the original partition. m_partition.reset( KPMHelpers::clonePartition( m_device, partition ) ); m_partitionColor = color; } void PartitionSizeController::setPartResizerWidget( PartResizerWidget* widget, bool format ) { Q_ASSERT( m_device ); if ( m_partResizerWidget ) { disconnect( m_partResizerWidget, nullptr, this, nullptr ); } m_dirty = false; m_currentSpinBoxValue = -1; // Update partition filesystem. This must be done *before* the call to // PartResizerWidget::init() otherwise it will be ignored by the widget. // This is why this method accept a `format` boolean. qint64 used = format ? 0 : m_originalPartition->fileSystem().sectorsUsed(); m_partition->fileSystem().setSectorsUsed( used ); // Init PartResizerWidget m_partResizerWidget = widget; PartitionTable* table = m_device->partitionTable(); qint64 minFirstSector = m_originalPartition->firstSector() - table->freeSectorsBefore( *m_originalPartition ); qint64 maxLastSector = m_originalPartition->lastSector() + table->freeSectorsAfter( *m_originalPartition ); m_partResizerWidget->init( *m_device, *m_partition.data(), minFirstSector, maxLastSector ); // FIXME: Should be set by PartResizerWidget itself m_partResizerWidget->setFixedHeight( PartResizerWidget::handleHeight() ); QPalette pal = widget->palette(); pal.setColor( QPalette::Base, ColorUtils::freeSpaceColor() ); pal.setColor( QPalette::Button, m_partitionColor ); m_partResizerWidget->setPalette( pal ); connectWidgets(); if ( !format ) { // If we are not formatting, update the widget to make sure the space // between the first and last sectors is big enough to fit the existing // content. m_updating = true; qint64 firstSector = m_partition->firstSector(); qint64 lastSector = m_partition->lastSector(); // This first time we call doAAUPRW with real first/last sector, // all further calls will come from updatePartResizerWidget, and // will therefore use values calculated from the SpinBox. doAlignAndUpdatePartResizerWidget( firstSector, lastSector ); m_updating = false; } } 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(); } void PartitionSizeController::connectWidgets() { if ( !m_spinBox || !m_partResizerWidget ) { return; } connect( m_spinBox, SIGNAL( editingFinished() ), SLOT( updatePartResizerWidget() ) ); connect( m_partResizerWidget, SIGNAL( firstSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); connect( m_partResizerWidget, SIGNAL( lastSectorChanged( qint64 ) ), SLOT( updateSpinBox() ) ); // Init m_spinBox from m_partResizerWidget updateSpinBox(); } 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(); qint64 firstSector = m_partition->firstSector(); qint64 lastSector = firstSector + sectorSize - 1; doAlignAndUpdatePartResizerWidget( firstSector, lastSector ); m_updating = false; } void PartitionSizeController::doAlignAndUpdatePartResizerWidget( qint64 firstSector, qint64 lastSector ) { if ( lastSector > m_partResizerWidget->maximumLastSector() ) { qint64 delta = lastSector - m_partResizerWidget->maximumLastSector(); firstSector -= delta; lastSector -= delta; } if ( lastSector != m_partition->lastSector() ) { m_partResizerWidget->updateLastSector( lastSector ); m_dirty = true; } if ( firstSector != m_partition->firstSector() ) { m_partResizerWidget->updateFirstSector( firstSector ); m_dirty = true; } // Update spinbox value in case it was an impossible value doUpdateSpinBox(); } void PartitionSizeController::updateSpinBox() { if ( m_updating ) { return; } m_updating = true; doUpdateSpinBox(); m_updating = false; } 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 { m_dirty = true; } m_currentSpinBoxValue = mbSize; } qint64 PartitionSizeController::firstSector() const { return m_partition->firstSector(); } qint64 PartitionSizeController::lastSector() const { return m_partition->lastSector(); } bool PartitionSizeController::isDirty() const { return m_dirty; } calamares-3.2.41.1/src/modules/partition/gui/PartitionSizeController.h000066400000000000000000000035561410275732300257620ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONSIZECONTROLLER_H #define PARTITIONSIZECONTROLLER_H // KPMcore #include // Qt #include #include #include #include class QSpinBox; class Device; class Partition; class PartResizerWidget; /** * Synchronizes a PartResizerWidget and a QSpinBox, making sure any change made * to one is reflected in the other. * * It does not touch the partition it works on: changes are exposed through the * firstSector() and lastSector() getters. */ class PartitionSizeController : public QObject { Q_OBJECT public: explicit PartitionSizeController( QObject* parent = nullptr ); void init( Device* device, Partition* partition, const QColor& color ); void setPartResizerWidget( PartResizerWidget* widget, bool format = true ); void setSpinBox( QSpinBox* spinBox ); qint64 firstSector() const; qint64 lastSector() const; bool isDirty() const; private: QPointer< PartResizerWidget > m_partResizerWidget; QPointer< QSpinBox > m_spinBox; Device* m_device = nullptr; const Partition* m_originalPartition = nullptr; QScopedPointer< Partition > m_partition; QColor m_partitionColor; bool m_updating = false; void connectWidgets(); void doUpdateSpinBox(); void doAlignAndUpdatePartResizerWidget( qint64 fistSector, qint64 lastSector ); bool m_dirty = false; qint64 m_currentSpinBoxValue = -1; private Q_SLOTS: void updatePartResizerWidget(); void updateSpinBox(); }; #endif /* PARTITIONSIZECONTROLLER_H */ calamares-3.2.41.1/src/modules/partition/gui/PartitionSplitterWidget.cpp000066400000000000000000000461221410275732300263050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PartitionSplitterWidget.h" #include "core/ColorUtils.h" #include "core/KPMHelpers.h" #include "partition/PartitionIterator.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/CalamaresUtilsGui.h" #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 CORNER_RADIUS = 3; static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 ); PartitionSplitterWidget::PartitionSplitterWidget( QWidget* parent ) : QWidget( parent ) , m_itemToResize( PartitionSplitterItem::null() ) , m_itemToResizeNext( PartitionSplitterItem::null() ) , m_itemMinSize( 0 ) , m_itemMaxSize( 0 ) , m_itemPrefSize( 0 ) , m_resizing( false ) , m_resizeHandleX( 0 ) , HANDLE_SNAP( QApplication::startDragDistance() ) , m_drawNestedPartitions( false ) { setMouseTracking( true ); } void 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 ) { 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 ); } } } setupItems( allPartitionItems ); } void PartitionSplitterWidget::setupItems( const QVector< PartitionSplitterItem >& items ) { m_itemToResize = PartitionSplitterItem::null(); m_itemToResizeNext = PartitionSplitterItem::null(); m_itemToResizePath.clear(); m_items.clear(); 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 ) { cDebug() << "path:" << path << Logger::Continuation << "minSize:" << minSize << Logger::Continuation << "maxSize:" << maxSize << Logger::Continuation << "prfSize:" << preferredSize; if ( m_itemToResize && m_itemToResizeNext ) { cDebug() << "NOTICE: trying to split partition but partition to split is already set."; // 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() ) { m_items[ i ].size = m_items[ i ].size + m_itemToResizeNext.size; m_items[ i ].status = PartitionSplitterItem::Normal; m_items.removeAt( i + 1 ); m_itemToResizeNext = PartitionSplitterItem::null(); break; } else if ( !m_items[ i ].children.isEmpty() ) { 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() ) { 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(); break; } } if ( m_itemToResizeNext.isNull() ) { break; } } } m_itemToResize = PartitionSplitterItem::null(); m_itemToResizePath.clear(); } PartitionSplitterItem itemToResize = _findItem( m_items, [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; } ); cDebug() << "each splitter item opcount:" << opCount; m_itemMinSize = minSize; m_itemMaxSize = maxSize; m_itemPrefSize = preferredSize; for ( int i = 0; i < m_items.count(); ++i ) { if ( m_items[ i ].itemPath == itemToResize.itemPath ) { 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() ) { for ( int j = 0; j < m_items[ i ].children.count(); ++j ) { 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 ]; break; } } if ( !m_itemToResizeNext.isNull() ) { break; } } } 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; repaint(); } qint64 PartitionSplitterWidget::splitPartitionSize() const { if ( !m_itemToResize ) { return -1; } return m_itemToResize.size; } qint64 PartitionSplitterWidget::newPartitionSize() const { if ( !m_itemToResizeNext ) { return -1; } return m_itemToResizeNext.size; } QSize PartitionSplitterWidget::sizeHint() const { return QSize( -1, VIEW_HEIGHT ); } QSize PartitionSplitterWidget::minimumSizeHint() const { return sizeHint(); } void PartitionSplitterWidget::paintEvent( QPaintEvent* event ) { Q_UNUSED( event ) QPainter painter( this ); painter.fillRect( rect(), palette().window() ); painter.setRenderHint( QPainter::Antialiasing ); drawPartitions( &painter, rect(), m_items ); } void PartitionSplitterWidget::mousePressEvent( QMouseEvent* event ) { if ( m_itemToResize && m_itemToResizeNext && event->button() == Qt::LeftButton ) { if ( qAbs( event->x() - m_resizeHandleX ) < HANDLE_SNAP ) { m_resizing = true; } } } void PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event ) { if ( m_resizing ) { qint64 start = 0; QString itemPath = m_itemToResize.itemPath; 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 ) { if ( jt->itemPath == itemPath ) { done = true; break; } start += jt->size; } if ( done ) { break; } } else { start += it->size; } } qint64 total = 0; for ( auto it = m_items.constBegin(); it != m_items.constEnd(); ++it ) { total += it->size; } 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 ) ); qint64 span = m_itemPrefSize; qreal percent = mx / span; qint64 oldsize = m_itemToResize.size; m_itemToResize.size = qRound64( span * percent ); 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; } ); repaint(); 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 ); } } } } void PartitionSplitterWidget::mouseReleaseEvent( QMouseEvent* event ) { Q_UNUSED( event ) m_resizing = false; } void PartitionSplitterWidget::drawSection( QPainter* painter, const QRect& rect_, int x, int width, const PartitionSplitterItem& item ) { QColor color = item.color; bool isFreeSpace = item.isFreeSpace; QRect rect = rect_; const int y = rect.y(); const int rectHeight = rect.height(); const int radius = qMax( 1, CORNER_RADIUS - ( height() - rectHeight ) / 2 ); painter->setClipRect( x, y, width, rectHeight ); painter->translate( 0.5, 0.5 ); rect.adjust( 0, 0, -1, -1 ); const QColor borderColor = color.darker(); painter->setPen( borderColor ); painter->setBrush( color ); painter->drawRoundedRect( rect, radius, radius ); // Draw shade if ( !isFreeSpace ) { rect.adjust( 2, 2, -2, -2 ); } QLinearGradient gradient( 0, 0, 0, rectHeight / 2 ); qreal c = isFreeSpace ? 0 : 1; gradient.setColorAt( 0, QColor::fromRgbF( c, c, c, 0.3 ) ); gradient.setColorAt( 1, QColor::fromRgbF( c, c, c, 0 ) ); painter->setPen( Qt::NoPen ); painter->setBrush( gradient ); painter->drawRoundedRect( rect, radius, radius ); painter->translate( -0.5, -0.5 ); } void PartitionSplitterWidget::drawResizeHandle( QPainter* painter, const QRect& rect_, int x ) { if ( !m_itemToResize ) { return; } painter->setPen( Qt::NoPen ); painter->setBrush( Qt::black ); painter->setClipRect( rect_ ); painter->setRenderHint( QPainter::Antialiasing, true ); 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 ) }; 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 ); } auto p1 = arrow_offsets[ 0 ]; if ( m_itemToResize.size > m_itemMinSize ) { 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 ); } if ( m_itemToResize.size < m_itemMaxSize ) { 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 ); } void PartitionSplitterWidget::drawPartitions( QPainter* painter, const QRect& rect, const QVector< PartitionSplitterItem >& itemList ) { const int count = itemList.count(); const int totalWidth = rect.width(); auto pair = computeItemsVector( itemList ); QVector< PartitionSplitterItem >& items = pair.first; qreal total = pair.second; int x = rect.x(); for ( int row = 0; row < count; ++row ) { 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 { width = rect.right() - x + 1; } 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 ); 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 ) { m_resizeHandleX = x; drawResizeHandle( painter, rect, m_resizeHandleX ); } x += width; } } PartitionSplitterItem PartitionSplitterWidget::_findItem( QVector< PartitionSplitterItem >& items, std::function< bool( PartitionSplitterItem& ) > condition ) const { 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(); } int PartitionSplitterWidget::_eachItem( QVector< PartitionSplitterItem >& items, std::function< bool( PartitionSplitterItem& ) > operation ) const { int opCount = 0; for ( auto it = items.begin(); it != items.end(); ++it ) { if ( operation( *it ) ) { opCount++; } opCount += _eachItem( it->children, operation ); } return opCount; } QPair< QVector< PartitionSplitterItem >, qreal > PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const { QVector< PartitionSplitterItem > items; qreal total = 0; for ( int row = 0; row < originalItems.count(); ++row ) { if ( originalItems[ row ].children.isEmpty() ) { items += originalItems[ row ]; total += originalItems[ row ].size; } else { PartitionSplitterItem thisItem = originalItems[ row ]; QPair< QVector< PartitionSplitterItem >, qreal > pair = computeItemsVector( thisItem.children ); thisItem.children = pair.first; thisItem.size = qint64( pair.second ); items += thisItem; total += thisItem.size; } } // The sizes we have are perfect, but now we have to hardcode a minimum size for small // partitions and compensate for it in the total. 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%. adjustedTotal -= items[ row ].size; items[ row ].size = qint64( 0.01 * total ); adjustedTotal += items[ row ].size; } } return qMakePair( items, adjustedTotal ); } calamares-3.2.41.1/src/modules/partition/gui/PartitionSplitterWidget.h000066400000000000000000000056231410275732300257530ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONSPLITTERWIDGET_H #define PARTITIONSPLITTERWIDGET_H #include #include class Device; struct PartitionSplitterItem { enum Status { Normal = 0, Resizing, ResizingNext }; QString itemPath; QColor color; bool isFreeSpace; qint64 size; Status status; using ChildVector = QVector< PartitionSplitterItem >; ChildVector children; static PartitionSplitterItem null() { return { QString(), QColor(), false, 0, Normal, ChildVector() }; } bool isNull() const { return itemPath.isEmpty() && size == 0 && status == Normal; } operator bool() const { return !isNull(); } }; class PartitionSplitterWidget : public QWidget { Q_OBJECT public: explicit PartitionSplitterWidget( QWidget* parent = nullptr ); void init( Device* dev, bool drawNestedPartitions ); void setSplitPartition( const QString& path, qint64 minSize, qint64 maxSize, qint64 preferredSize ); qint64 splitPartitionSize() const; qint64 newPartitionSize() const; QSize sizeHint() const override; QSize minimumSizeHint() const override; signals: void partitionResized( const QString&, qint64, qint64 ); protected: void paintEvent( QPaintEvent* event ) override; void mousePressEvent( QMouseEvent* event ) override; void mouseMoveEvent( QMouseEvent* event ) override; void mouseReleaseEvent( QMouseEvent* event ) override; 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 ); PartitionSplitterItem _findItem( QVector< PartitionSplitterItem >& items, std::function< bool( PartitionSplitterItem& ) > condition ) const; int _eachItem( QVector< PartitionSplitterItem >& items, std::function< bool( PartitionSplitterItem& ) > operation ) const; QPair< QVector< PartitionSplitterItem >, qreal > computeItemsVector( const QVector< PartitionSplitterItem >& originalItems ) const; QVector< PartitionSplitterItem > m_items; QString m_itemToResizePath; PartitionSplitterItem m_itemToResize; PartitionSplitterItem m_itemToResizeNext; qint64 m_itemMinSize; qint64 m_itemMaxSize; qint64 m_itemPrefSize; bool m_resizing; int m_resizeHandleX; const int HANDLE_SNAP; bool m_drawNestedPartitions; }; #endif // PARTITIONSPLITTERWIDGET_H calamares-3.2.41.1/src/modules/partition/gui/PartitionViewSelectionFilter.h000066400000000000000000000007561410275732300267310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONVIEWSELECTIONFILTER_H #define PARTITIONVIEWSELECTIONFILTER_H #include #include typedef std::function< bool( const QModelIndex& ) > SelectionFilter; #endif // PARTITIONVIEWSELECTIONFILTER_H calamares-3.2.41.1/src/modules/partition/gui/ReplaceWidget.cpp000066400000000000000000000336311410275732300241610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ReplaceWidget.h" #include "ui_ReplaceWidget.h" #include "core/DeviceModel.h" #include "core/PartitionActions.h" #include "core/PartitionCoreModule.h" #include "core/PartitionInfo.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Retranslator.h" #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; ReplaceWidget::ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent ) : QWidget( parent ) , m_ui( new Ui_ReplaceWidget ) , m_core( core ) , m_isEfi( false ) { m_ui->setupUi( this ); m_ui->bootComboBox->hide(); m_ui->bootComboBox->clear(); m_ui->bootStatusLabel->hide(); m_ui->bootStatusLabel->clear(); updateFromCurrentDevice( devicesComboBox ); connect( devicesComboBox, &QComboBox::currentTextChanged, this, [=]( const QString& /* text */ ) { updateFromCurrentDevice( devicesComboBox ); } ); CALAMARES_RETRANSLATE( onPartitionSelected(); ); } ReplaceWidget::~ReplaceWidget() {} bool ReplaceWidget::isNextEnabled() const { return m_nextEnabled; } void ReplaceWidget::reset() { //moo; } void ReplaceWidget::applyChanges() { auto gs = Calamares::JobQueue::instance()->globalStorage(); PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model ) { Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); if ( partition ) { Device* dev = model->device(); 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() ); } else if ( efiSystemPartitions.count() > 1 ) { PartitionInfo::setMountPoint( efiSystemPartitions.at( m_ui->bootComboBox->currentIndex() ), gs->value( "efiSystemPartition" ).toString() ); } } m_core->dumpQueue(); } } } 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( branding->versionedName() ) ); setNextEnabled( false ); return; } bool ok = false; 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(); Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); if ( !partition || partition->state() != KPM_PARTITION_STATE( None ) ) { updateStatus( CalamaresUtils::Fail, tr( "The selected item does not appear to be a valid partition." ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Unallocated ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on empty space. Please select an " "existing partition." ) .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Extended ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on an extended partition. Please select an " "existing primary or logical partition." ) .arg( branding->versionedName() ) ); setNextEnabled( false ); return; } if ( partition->partitionPath().isEmpty() ) { updateStatus( CalamaresUtils::Fail, 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 auto& line : osproberLines ) { QStringList lineColumns = line.split( ':' ); QString path = lineColumns.value( 0 ).simplified(); if ( path == partition->partitionPath() ) { 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 ); } else { prettyName = tr( "%1 system partition (%2)" ) .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) .arg( fsNameForUser ); } break; } } if ( 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( branding->versionedName() ) .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), 0, 'f', 1 ) .arg( prettyName ) ); setNextEnabled( false ); return; } m_ui->bootComboBox->hide(); m_ui->bootComboBox->clear(); m_ui->bootStatusLabel->hide(); m_ui->bootStatusLabel->clear(); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 0 ) { updateStatus( CalamaresUtils::Fail, tr( "%2

" "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) .arg( branding->shortProductName() ) .arg( prettyName ) ); setNextEnabled( false ); } else if ( efiSystemPartitions.count() == 1 ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%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( branding->shortProductName() ) ); setNextEnabled( true ); } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%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(); for ( int i = 0; i < efiSystemPartitions.count(); ++i ) { Partition* efiPartition = efiSystemPartitions.at( i ); m_ui->bootComboBox->addItem( efiPartition->partitionPath(), i ); if ( efiPartition->devicePath() == partition->devicePath() && efiPartition->number() == 1 ) { m_ui->bootComboBox->setCurrentIndex( i ); } } setNextEnabled( true ); } } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "%3

" "%1 will be installed on %2.
" "Warning: all data on partition " "%2 will be lost." ) .arg( branding->versionedName() ) .arg( partition->partitionPath() ) .arg( prettyName ) ); setNextEnabled( true ); } } } void ReplaceWidget::setNextEnabled( bool enabled ) { if ( enabled == m_nextEnabled ) { return; } m_nextEnabled = enabled; Q_EMIT nextStatusChanged( enabled ); } 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->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 ); m_ui->partitionTreeView->expandAll(); // Must be done here because we need to have a model set to define // individual column resize mode QHeaderView* header = m_ui->partitionTreeView->header(); header->setSectionResizeMode( QHeaderView::ResizeToContents ); header->setSectionResizeMode( 0, QHeaderView::Stretch ); //updateButtons(); // Establish connection here because selection model is destroyed when // model changes connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &ReplaceWidget::onPartitionViewActivated ); connect( model, &QAbstractItemModel::modelReset, this, &ReplaceWidget::onPartitionModelReset ); } void ReplaceWidget::onPartitionViewActivated() { QModelIndex index = m_ui->partitionTreeView->currentIndex(); if ( !index.isValid() ) { return; } const PartitionModel* model = static_cast< const PartitionModel* >( index.model() ); Q_ASSERT( model ); Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); onPartitionSelected(); } void ReplaceWidget::onPartitionModelReset() { m_ui->partitionTreeView->expandAll(); onPartitionSelected(); } calamares-3.2.41.1/src/modules/partition/gui/ReplaceWidget.h000066400000000000000000000026211410275732300236210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef REPLACEWIDGET_H #define REPLACEWIDGET_H #include "utils/CalamaresUtilsGui.h" #include #include class Ui_ReplaceWidget; class QComboBox; class PartitionCoreModule; class Partition; class ReplaceWidget : public QWidget { Q_OBJECT public: explicit ReplaceWidget( PartitionCoreModule* core, QComboBox* devicesComboBox, QWidget* parent = nullptr ); virtual ~ReplaceWidget() override; bool isNextEnabled() const; void reset(); void applyChanges(); signals: void nextStatusChanged( bool ); private slots: void onPartitionSelected(); private: QScopedPointer< Ui_ReplaceWidget > m_ui; void setNextEnabled( bool enabled ); void updateStatus( CalamaresUtils::ImageType imageType, const QString& text ); PartitionCoreModule* m_core; bool m_nextEnabled; bool m_isEfi; void updateFromCurrentDevice( QComboBox* devicesComboBox ); void onPartitionViewActivated(); void onPartitionModelReset(); }; #endif // REPLACEWIDGET_H calamares-3.2.41.1/src/modules/partition/gui/ReplaceWidget.ui000066400000000000000000000072041410275732300240110ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later ReplaceWidget 0 0 643 187 Form 0 0 0 0 0 QAbstractItemView::NoEditTriggers false true false false Qt::AlignCenter true 0 0 Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true Qt::Vertical 20 40 calamares-3.2.41.1/src/modules/partition/gui/ResizeVolumeGroupDialog.cpp000066400000000000000000000034221410275732300262230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ResizeVolumeGroupDialog.h" #include "gui/ListPhysicalVolumeWidgetItem.h" #include #include #include #include #include #include ResizeVolumeGroupDialog::ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ) : VolumeGroupBaseDialog( device->name(), device->physicalVolumes(), parent ) , m_selectedPVs( selectedPVs ) { setWindowTitle( tr( "Resize Volume Group" ) ); for ( int i = 0; i < pvList()->count(); i++ ) { pvList()->item( i )->setCheckState( Qt::Checked ); } for ( const Partition* p : availablePVs ) { pvList()->addItem( new ListPhysicalVolumeWidgetItem( p, false ) ); } peSize()->setValue( static_cast< int >( device->peSize() / Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) ) ); vgName()->setEnabled( false ); peSize()->setEnabled( false ); vgType()->setEnabled( false ); setUsedSizeValue( device->allocatedPE() * device->peSize() ); setLVQuantity( device->partitionTable()->children().count() ); } void ResizeVolumeGroupDialog::accept() { m_selectedPVs << checkedItems(); QDialog::accept(); } calamares-3.2.41.1/src/modules/partition/gui/ResizeVolumeGroupDialog.h000066400000000000000000000016661410275732300257000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef RESIZEVOLUMEGROUPDIALOG_H #define RESIZEVOLUMEGROUPDIALOG_H #include "gui/VolumeGroupBaseDialog.h" class LvmDevice; class ResizeVolumeGroupDialog : public VolumeGroupBaseDialog { Q_OBJECT public: using PartitionVector = QVector< const Partition* >; ResizeVolumeGroupDialog( LvmDevice* device, const PartitionVector& availablePVs, PartitionVector& selectedPVs, QWidget* parent ); void accept() override; private: PartitionVector& m_selectedPVs; }; #endif // RESIZEVOLUMEGROUPDIALOG_H calamares-3.2.41.1/src/modules/partition/gui/ScanningDialog.cpp000066400000000000000000000037671410275732300243310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ScanningDialog.h" #include "3rdparty/waitingspinnerwidget.h" #include #include #include #include ScanningDialog::ScanningDialog( const QString& text, const QString& windowTitle, QWidget* parent ) : QDialog( parent ) { setModal( true ); setWindowTitle( windowTitle ); QHBoxLayout* dialogLayout = new QHBoxLayout; setLayout( dialogLayout ); WaitingSpinnerWidget* spinner = new WaitingSpinnerWidget(); dialogLayout->addWidget( spinner ); spinner->start(); QLabel* rescanningLabel = new QLabel( text, this ); dialogLayout->addWidget( rescanningLabel ); } void ScanningDialog::run( const QFuture< void >& future, const QString& text, const QString& windowTitle, const std::function< void() >& callback, QWidget* 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(); } ); watcher->setFuture( future ); } void ScanningDialog::run( const QFuture< void >& future, const std::function< void() >& callback, QWidget* parent ) { ScanningDialog::run( future, tr( "Scanning storage devices..." ), tr( "Partitioning" ), callback, parent ); } void ScanningDialog::setVisible( bool visible ) { QDialog::setVisible( visible ); Q_EMIT visibilityChanged(); } calamares-3.2.41.1/src/modules/partition/gui/ScanningDialog.h000066400000000000000000000020251410275732300237600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SCANNINGDIALOG_H #define SCANNINGDIALOG_H #include #include #include class ScanningDialog : public QDialog { Q_OBJECT public: 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 std::function< void() >& callback = [] {}, QWidget* parent = nullptr ); public slots: void setVisible( bool visible ) override; signals: void visibilityChanged(); }; #endif // SCANNINGDIALOG_H calamares-3.2.41.1/src/modules/partition/gui/VolumeGroupBaseDialog.cpp000066400000000000000000000101301410275732300256260ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "VolumeGroupBaseDialog.h" #include "ui_VolumeGroupBaseDialog.h" #include "gui/ListPhysicalVolumeWidgetItem.h" #include #include #include #include #include #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 ) { 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 ); 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->peSize, qOverload< int >( &QSpinBox::valueChanged ), this, [&]( int ) { updateTotalSectors(); updateOkButton(); } ); connect( ui->vgName, &QLineEdit::textChanged, this, [&]( const QString& ) { updateOkButton(); } ); } VolumeGroupBaseDialog::~VolumeGroupBaseDialog() { delete ui; } QVector< const Partition* > 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 ) ); if ( item && item->checkState() == Qt::Checked ) { items << item->partition(); } } return items; } bool VolumeGroupBaseDialog::isSizeValid() const { return m_totalSizeValue >= m_usedSizeValue; } void VolumeGroupBaseDialog::updateOkButton() { okButton()->setEnabled( isSizeValid() && !checkedItems().empty() && !ui->vgName->text().isEmpty() && ui->peSize->value() > 0 ); } void VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize ) { m_usedSizeValue = usedSize; ui->usedSize->setText( Capacity::formatByteSize( m_usedSizeValue ) ); } void VolumeGroupBaseDialog::setLVQuantity( qint32 lvQuantity ) { ui->lvQuantity->setText( QString::number( lvQuantity ) ); } void 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 ) ); } ui->totalSize->setText( Capacity::formatByteSize( m_totalSizeValue ) ); updateTotalSectors(); } void VolumeGroupBaseDialog::updateTotalSectors() { qint64 totalSectors = 0; 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 ) ); } QString& VolumeGroupBaseDialog::vgNameValue() const { return m_vgNameValue; } QLineEdit* VolumeGroupBaseDialog::vgName() const { return ui->vgName; } QComboBox* VolumeGroupBaseDialog::vgType() const { return ui->vgType; } QSpinBox* VolumeGroupBaseDialog::peSize() const { return ui->peSize; } QListWidget* VolumeGroupBaseDialog::pvList() const { return ui->pvList; } QPushButton* VolumeGroupBaseDialog::okButton() const { return ui->buttonBox->button( QDialogButtonBox::StandardButton::Ok ); } calamares-3.2.41.1/src/modules/partition/gui/VolumeGroupBaseDialog.h000066400000000000000000000025701410275732300253040ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef VOLUMEGROUPBASEDIALOG_H #define VOLUMEGROUPBASEDIALOG_H #include #include namespace Ui { class VolumeGroupBaseDialog; } class QComboBox; class QLineEdit; class QListWidget; class QSpinBox; class VolumeGroupBaseDialog : public QDialog { Q_OBJECT public: explicit VolumeGroupBaseDialog( QString& vgName, QVector< const Partition* > pvList, QWidget* parent = nullptr ); ~VolumeGroupBaseDialog() override; protected: virtual void updateOkButton(); void setUsedSizeValue( qint64 usedSize ); void setLVQuantity( qint32 lvQuantity ); void updateTotalSize(); void updateTotalSectors(); QVector< const Partition* > checkedItems() const; bool isSizeValid() const; QString& vgNameValue() const; QLineEdit* vgName() const; QComboBox* vgType() const; QSpinBox* peSize() const; QListWidget* pvList() const; QPushButton* okButton() const; private: Ui::VolumeGroupBaseDialog* ui; QString& m_vgNameValue; qint64 m_totalSizeValue; qint64 m_usedSizeValue; }; #endif // VOLUMEGROUPBASEDIALOG_H calamares-3.2.41.1/src/modules/partition/gui/VolumeGroupBaseDialog.ui000066400000000000000000000130701410275732300254670ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2018 Caio <caiojcarvalho@gmail.com> SPDX-License-Identifier: GPL-3.0-or-later VolumeGroupBaseDialog 0 0 611 367 Create Volume Group List of Physical Volumes Volume Group Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Volume Group Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Physical Extent Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter MiB 1 999 4 Total Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Used Size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Total Sectors: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Quantity of LVs: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter --- Qt::AlignCenter Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() VolumeGroupBaseDialog accept() 248 254 157 274 buttonBox rejected() VolumeGroupBaseDialog reject() 316 260 286 274 calamares-3.2.41.1/src/modules/partition/jobs/000077500000000000000000000000001410275732300211015ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/partition/jobs/AutoMountManagementJob.cpp000066400000000000000000000017651410275732300262010ustar00rootroot00000000000000/* === 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() { cVerbose() << "this" << Logger::Pointer( this ) << "value" << Logger::Pointer( m_stored ) << ( m_stored ? "restore" : m_disable ? "disable" : "enable" ); if ( m_stored ) { CalamaresUtils::Partition::automountRestore( m_stored ); m_stored.reset(); } else { m_stored = CalamaresUtils::Partition::automountDisable( m_disable ); } return Calamares::JobResult::ok(); } calamares-3.2.41.1/src/modules/partition/jobs/AutoMountManagementJob.h000066400000000000000000000022471410275732300256420ustar00rootroot00000000000000/* === 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 */ calamares-3.2.41.1/src/modules/partition/jobs/ChangeFilesystemLabelJob.cpp000066400000000000000000000034441410275732300264370ustar00rootroot00000000000000/* === 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() ); } calamares-3.2.41.1/src/modules/partition/jobs/ChangeFilesystemLabelJob.h000066400000000000000000000017211410275732300261000ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/partition/jobs/ClearMountsJob.cpp000066400000000000000000000217641410275732300245060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ClearMountsJob.h" #include "core/PartitionInfo.h" #include "partition/PartitionIterator.h" #include "partition/Sync.h" #include "utils/Logger.h" #include "utils/String.h" // KPMcore #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 getPartitionsForDevice( const QString& deviceName ) { QStringList partitions; QFile dev_partitions( "/proc/partitions" ); if ( dev_partitions.open( QFile::ReadOnly ) ) { cDebug() << "Reading from" << dev_partitions.fileName(); 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( ' ', SplitSkipEmptyParts ); if ( ( columns.count() >= 4 ) && ( columns[ 3 ].startsWith( deviceName ) ) && ( columns[ 3 ] != deviceName ) ) { partitions.append( columns[ 3 ] ); } } } else { cDebug() << "Could not open" << dev_partitions.fileName(); } return partitions; } Calamares::JobResult ClearMountsJob::exec() { 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.waitForFinished(); // Sample output: // % sudo sfdisk -d /dev/sda // label: dos // label-id: 0x000ced89 // device: /dev/sda // unit: sectors // /dev/sda1 : start= 63, size= 29329345, type=83, bootable // /dev/sda2 : start= 29331456, size= 2125824, type=82 swapPartitions = QString::fromLocal8Bit( process.readAllStandardOutput() ).split( '\n' ); swapPartitions = swapPartitions.filter( "type=82" ); for ( QStringList::iterator it = swapPartitions.begin(); it != swapPartitions.end(); ++it ) { *it = ( *it ).simplified().split( ' ' ).first(); } const QStringList cryptoDevices = getCryptoDevices(); for ( const QString& mapperPath : cryptoDevices ) { tryUmount( mapperPath ); QString news = tryCryptoClose( mapperPath ); if ( !news.isEmpty() ) { goodNews.append( news ); } } // 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 ); } } } else { cWarning() << "this system does not seem to have LVM2 tools."; } // Then we go looking for volume groups that use this device for physical volumes process.start( "pvdisplay", { "-C", "--noheadings" } ); process.waitForFinished(); if ( process.exitCode() == 0 ) //means LVM2 tools are installed { QString pvdisplayOutput = process.readAllStandardOutput(); if ( !pvdisplayOutput.simplified().isEmpty() ) //means there is at least one LVM PV { QSet< QString > vgSet; const QStringList pvdisplayLines = pvdisplayOutput.split( '\n' ); for ( const QString& pvdisplayLine : pvdisplayLines ) { QString pvPath = pvdisplayLine.simplified().split( ' ' ).value( 0 ); QString vgName = pvdisplayLine.simplified().split( ' ' ).value( 1 ); if ( !pvPath.contains( deviceName ) ) { continue; } 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 ) ); } } } } else { cWarning() << "this system does not seem to have LVM2 tools."; } const QStringList cryptoDevices2 = getCryptoDevices(); for ( const QString& mapperPath : cryptoDevices2 ) { tryUmount( mapperPath ); QString news = tryCryptoClose( mapperPath ); if ( !news.isEmpty() ) { goodNews.append( news ); } } for ( const QString& p : partitionsList ) { QString partPath = QString( "/dev/%1" ).arg( p ); QString news = tryUmount( partPath ); if ( !news.isEmpty() ) { goodNews.append( news ); } } foreach ( QString p, swapPartitions ) { QString news = tryClearSwap( p ); if ( !news.isEmpty() ) { goodNews.append( news ); } } 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; } QString ClearMountsJob::tryUmount( const QString& partPath ) { QProcess process; process.start( "umount", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return QString( "Successfully unmounted %1." ).arg( partPath ); } process.start( "swapoff", { partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return QString( "Successfully disabled swap %1." ).arg( partPath ); } return QString(); } QString ClearMountsJob::tryClearSwap( const QString& partPath ) { QProcess process; process.start( "blkid", { "-s", "UUID", "-o", "value", partPath } ); process.waitForFinished(); QString swapPartUuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).simplified(); if ( process.exitCode() != 0 || swapPartUuid.isEmpty() ) { return QString(); } process.start( "mkswap", { "-U", swapPartUuid, partPath } ); process.waitForFinished(); if ( process.exitCode() != 0 ) { return QString(); } return QString( "Successfully cleared swap %1." ).arg( partPath ); } QString ClearMountsJob::tryCryptoClose( const QString& mapperPath ) { QProcess process; process.start( "cryptsetup", { "close", mapperPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { return QString( "Successfully closed mapper device %1." ).arg( mapperPath ); } return QString(); } QStringList ClearMountsJob::getCryptoDevices() const { 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; } calamares-3.2.41.1/src/modules/partition/jobs/ClearMountsJob.h000066400000000000000000000017111410275732300241410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CLEARMOUNTSJOB_H #define CLEARMOUNTSJOB_H #include "Job.h" class Device; /** * This job tries to free all mounts for the given device, so partitioning * operations can proceed. */ class ClearMountsJob : public Calamares::Job { Q_OBJECT public: explicit ClearMountsJob( Device* device ); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString tryUmount( const QString& partPath ); QString tryClearSwap( const QString& partPath ); QString tryCryptoClose( const QString& mapperPath ); QStringList getCryptoDevices() const; Device* m_device; }; #endif // CLEARMOUNTSJOB_H calamares-3.2.41.1/src/modules/partition/jobs/ClearTempMountsJob.cpp000066400000000000000000000051361410275732300253270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ClearTempMountsJob.h" #include "utils/Logger.h" #include "utils/String.h" #include #include #include #include #include ClearTempMountsJob::ClearTempMountsJob() : Calamares::Job() { } QString ClearTempMountsJob::prettyName() const { return tr( "Clear all temporary mounts." ); } QString ClearTempMountsJob::prettyStatusMessage() const { return tr( "Clearing all temporary mounts." ); } 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." ) ); } cVerbose() << o << "Opened mtab. Lines:"; QTextStream in( &mtab ); QString lineIn = in.readLine(); while ( !lineIn.isNull() ) { QStringList line = lineIn.split( ' ', SplitSkipEmptyParts ); cVerbose() << o << line.join( ' ' ); QString device = line.at( 0 ); QString mountPoint = line.at( 1 ); if ( mountPoint.startsWith( "/tmp/calamares-" ) ) { lst.append( qMakePair( device, mountPoint ) ); } lineIn = in.readLine(); } if ( lst.empty() ) { 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; } ); QStringList goodNews; QProcess process; for ( const auto& line : qAsConst( lst ) ) { QString partPath = line.second; cDebug() << o << "Will try to umount path" << partPath; process.start( "umount", { "-lv", partPath } ); process.waitForFinished(); if ( process.exitCode() == 0 ) { goodNews.append( QString( "Successfully unmounted %1." ).arg( partPath ) ); } } Calamares::JobResult ok = Calamares::JobResult::ok(); ok.setMessage( tr( "Cleared all temporary mounts." ) ); ok.setDetails( goodNews.join( "\n" ) ); cDebug() << o << "ClearTempMountsJob finished. Here's what was done:\n" << Logger::DebugList( goodNews ); return ok; } calamares-3.2.41.1/src/modules/partition/jobs/ClearTempMountsJob.h000066400000000000000000000013521410275732300247700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CLEARTEMPMOUNTSJOB_H #define CLEARTEMPMOUNTSJOB_H #include "Job.h" class Device; /** * This job tries to free all temporary mounts used by Calamares, so partitioning * operations can proceed. */ class ClearTempMountsJob : public Calamares::Job { Q_OBJECT public: explicit ClearTempMountsJob(); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; }; #endif // CLEARTEMPMOUNTSJOB_H calamares-3.2.41.1/src/modules/partition/jobs/CreatePartitionJob.cpp000066400000000000000000000200261410275732300253350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "CreatePartitionJob.h" #include "partition/FileSystem.h" #include "partition/PartitionQuery.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; 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() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ); } 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() ) ) .arg( CalamaresUtils::BytesToMiB( m_partition->capacity() ) ) .arg( m_device->name() ) .arg( m_device->deviceNode() ); } 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() ); } 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 ) ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( message, report.toText() ); } void CreatePartitionJob::updatePreview() { m_device->partitionTable()->removeUnallocated(); m_partition->parent()->insert( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); } calamares-3.2.41.1/src/modules/partition/jobs/CreatePartitionJob.h000066400000000000000000000020561410275732300250050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CREATEPARTITIONJOB_H #define CREATEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * Creates a partition on a device. * * This job does two things: * 1. Create the partition * 2. Create the filesystem on the partition */ class CreatePartitionJob : public PartitionJob { Q_OBJECT public: CreatePartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: Device* m_device; }; #endif /* CREATEPARTITIONJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/CreatePartitionTableJob.cpp000066400000000000000000000076641410275732300263220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "CreatePartitionTableJob.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" // KPMcore #include #include #include #include #include #include // Qt #include using CalamaresUtils::Partition::PartitionIterator; CreatePartitionTableJob::CreatePartitionTableJob( Device* device, PartitionTable::TableType type ) : m_device( device ) , m_type( type ) { } QString CreatePartitionTableJob::prettyName() const { return tr( "Create new %1 partition table on %2." ) .arg( PartitionTable::tableTypeToName( m_type ) ) .arg( m_device->deviceNode() ); } QString CreatePartitionTableJob::prettyDescription() const { return tr( "Create new %1 partition table on %2 (%3)." ) .arg( PartitionTable::tableTypeToName( m_type ).toUpper() ) .arg( m_device->deviceNode() ) .arg( m_device->name() ); } QString CreatePartitionTableJob::prettyStatusMessage() const { return tr( "Creating new %1 partition table on %2." ) .arg( PartitionTable::tableTypeToName( m_type ).toUpper() ) .arg( m_device->deviceNode() ); } 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(); 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() << Logger::SubEntry << ( ( *it ) ? ( *it )->deviceNode() : QString( "" ) ); } QProcess lsblk; lsblk.setProgram( "lsblk" ); lsblk.setProcessChannelMode( QProcess::MergedChannels ); lsblk.start(); lsblk.waitForFinished(); cDebug() << Logger::SubEntry << "lsblk output:\n" << Logger::NoQuote << lsblk.readAllStandardOutput(); QProcess mount; mount.setProgram( "mount" ); // Debug output only, not mounting something mount.setProcessChannelMode( QProcess::MergedChannels ); mount.start(); mount.waitForFinished(); cDebug() << Logger::SubEntry << "mount output:\n" << Logger::NoQuote << mount.readAllStandardOutput(); } CreatePartitionTableOperation op( *m_device, table ); op.setStatus( Operation::StatusRunning ); if ( op.execute( report ) ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( message, report.toText() ); } void CreatePartitionTableJob::updatePreview() { // Device takes ownership of its table, but does not destroy the current // one when setPartitionTable() is called, so do it ourself delete m_device->partitionTable(); m_device->setPartitionTable( createTable() ); m_device->partitionTable()->updateUnallocated( *m_device ); } PartitionTable* CreatePartitionTableJob::createTable() { cDebug() << "CreatePartitionTableJob::createTable trying to make table for device" << m_device->deviceNode(); return new PartitionTable( m_type, PartitionTable::defaultFirstUsable( *m_device, m_type ), PartitionTable::defaultLastUsable( *m_device, m_type ) ); } calamares-3.2.41.1/src/modules/partition/jobs/CreatePartitionTableJob.h000066400000000000000000000023661410275732300257610ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CREATEPARTITIONTABLEJOB_H #define CREATEPARTITIONTABLEJOB_H #include "Job.h" #include "partition/KPMManager.h" // KPMcore #include class Device; /** * Creates a partition table on a device. It supports MBR and GPT partition * tables. * * This wipes all the data from the device. */ class CreatePartitionTableJob : public Calamares::Job { Q_OBJECT public: CreatePartitionTableJob( Device* device, PartitionTable::TableType type ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: CalamaresUtils::Partition::KPMManager m_kpmcore; Device* m_device; PartitionTable::TableType m_type; PartitionTable* createTable(); }; #endif /* CREATEPARTITIONTABLEJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/CreateVolumeGroupJob.cpp000066400000000000000000000037131410275732300256540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "CreateVolumeGroupJob.h" // KPMcore #include #include #include #include CreateVolumeGroupJob::CreateVolumeGroupJob( Device*, QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ) : m_vgName( vgName ) , m_pvList( pvList ) , m_peSize( peSize ) { } QString CreateVolumeGroupJob::prettyName() const { return tr( "Create new volume group named %1." ).arg( m_vgName ); } QString CreateVolumeGroupJob::prettyDescription() const { return tr( "Create new volume group named %1." ).arg( m_vgName ); } QString CreateVolumeGroupJob::prettyStatusMessage() const { return tr( "Creating new volume group named %1." ).arg( m_vgName ); } 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() ); } void CreateVolumeGroupJob::updatePreview() { LvmDevice::s_DirtyPVs << m_pvList; } void CreateVolumeGroupJob::undoPreview() { for ( const auto& pv : m_pvList ) { if ( LvmDevice::s_DirtyPVs.contains( pv ) ) { LvmDevice::s_DirtyPVs.removeAll( pv ); } } } calamares-3.2.41.1/src/modules/partition/jobs/CreateVolumeGroupJob.h000066400000000000000000000020301410275732300253100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CREATEVOLUMEGROUPJOB_H #define CREATEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" #include class Device; class Partition; class CreateVolumeGroupJob : public Calamares::Job { Q_OBJECT public: CreateVolumeGroupJob( Device*, QString& vgName, QVector< const Partition* > pvList, const qint32 peSize ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); void undoPreview(); private: CalamaresUtils::Partition::KPMManager m_kpmcore; QString m_vgName; QVector< const Partition* > m_pvList; qint32 m_peSize; }; #endif // CREATEVOLUMEGROUPJOB_H calamares-3.2.41.1/src/modules/partition/jobs/DeactivateVolumeGroupJob.cpp000066400000000000000000000027141410275732300265220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "DeactivateVolumeGroupJob.h" #include #include #include DeactivateVolumeGroupJob::DeactivateVolumeGroupJob( LvmDevice* device ) : m_device( device ) { } QString DeactivateVolumeGroupJob::prettyName() const { return tr( "Deactivate volume group named %1." ).arg( m_device->name() ); } QString DeactivateVolumeGroupJob::prettyDescription() const { return tr( "Deactivate volume group named %1." ).arg( m_device->name() ); } QString DeactivateVolumeGroupJob::prettyStatusMessage() const { return tr( "Deactivate volume group named %1." ).arg( m_device->name() ); } 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 ) ) { op.preview(); return Calamares::JobResult::ok(); } return Calamares::JobResult::error( message, report.toText() ); } calamares-3.2.41.1/src/modules/partition/jobs/DeactivateVolumeGroupJob.h000066400000000000000000000015331410275732300261650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DEACTIVATEVOLUMEGROUPJOB_H #define DEACTIVATEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" class LvmDevice; class DeactivateVolumeGroupJob : public Calamares::Job { Q_OBJECT public: DeactivateVolumeGroupJob( LvmDevice* device ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; }; #endif // DEACTIVATEVOLUMEGROUPJOB_H calamares-3.2.41.1/src/modules/partition/jobs/DeletePartitionJob.cpp000066400000000000000000000047151410275732300253430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "DeletePartitionJob.h" // KPMcore #include #include #include #include #include #include DeletePartitionJob::DeletePartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } QString DeletePartitionJob::prettyName() const { return tr( "Delete partition %1." ).arg( m_partition->partitionPath() ); } QString DeletePartitionJob::prettyDescription() const { return tr( "Delete partition %1." ).arg( m_partition->partitionPath() ); } QString DeletePartitionJob::prettyStatusMessage() const { return tr( "Deleting partition %1." ).arg( m_partition->partitionPath() ); } 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 ) ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( message, report.toText() ); } void DeletePartitionJob::updatePreview() { m_partition->parent()->remove( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); // Copied from PM DeleteOperation::checkAdjustLogicalNumbers(): // // If the deleted partition is a logical one, we need to adjust the numbers // of the other logical partitions in the extended one, if there are any, // because the OS will do that, too: Logicals must be numbered without gaps, // i.e., a numbering like sda5, sda6, sda8 (after sda7 is deleted) will // become sda5, sda6, sda7 Partition* parentPartition = dynamic_cast< Partition* >( m_partition->parent() ); if ( parentPartition && parentPartition->roles().has( PartitionRole::Extended ) ) { parentPartition->adjustLogicalNumbers( m_partition->number(), -1 ); } } calamares-3.2.41.1/src/modules/partition/jobs/DeletePartitionJob.h000066400000000000000000000021701410275732300250010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef DELETEPARTITIONJOB_H #define DELETEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * Deletes an existing partition. * * This is only used for partitions which already existed before the installer * was started: partitions created within the installer and then removed are * simply forgotten. */ class DeletePartitionJob : public PartitionJob { Q_OBJECT public: DeletePartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const { return m_device; } private: Device* m_device; }; #endif /* DELETEPARTITIONJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/FillGlobalStorageJob.cpp000066400000000000000000000317211410275732300256000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "FillGlobalStorageJob.h" #include "core/KPMHelpers.h" #include "core/PartitionInfo.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "partition/FileSystem.h" #include "partition/Global.h" #include "partition/PartitionIterator.h" #include "utils/Logger.h" #include #include #include #include #include #include #include #include using CalamaresUtils::Partition::PartitionIterator; using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; typedef QHash< QString, QString > UuidForPartitionHash; static UuidForPartitionHash findPartitionUuids( QList< Device* > devices ) { UuidForPartitionHash hash; foreach ( Device* device, devices ) { for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { Partition* p = *it; QString path = p->partitionPath(); QString uuid = p->fileSystem().readUUID( p->partitionPath() ); hash.insert( path, uuid ); } } if ( hash.isEmpty() ) { cDebug() << "No UUIDs found for existing partitions."; } return hash; } static QString getLuksUuid( const QString& path ) { QProcess process; process.setProgram( "cryptsetup" ); process.setArguments( { "luksUUID", path } ); process.start(); process.waitForFinished(); if ( process.exitStatus() != QProcess::NormalExit || process.exitCode() ) { return QString(); } QString uuid = QString::fromLocal8Bit( process.readAllStandardOutput() ).trimmed(); return uuid; } static QVariant 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() ) { map[ "fs" ] = untranslatedFS( dynamic_cast< FS::luks& >( partition->fileSystem() ).innerFS() ); } map[ "uuid" ] = uuid; map[ "claimed" ] = PartitionInfo::format( partition ); // If we formatted it, it's ours // Debugging for inside the loop in createPartitionList(), // so indent a bit Logger::CDebug deb; using TR = Logger::DebugRow< const char* const, const QString& >; deb << Logger::SubEntry << "mapping for" << partition->partitionPath() << partition->deviceNode() << TR( "partlabel", map[ "partlabel" ].toString() ) << TR( "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( "uuid", uuid ) << TR( "claimed", map[ "claimed" ].toString() ); if ( partition->roles().has( PartitionRole::Luks ) ) { const FileSystem& fsRef = partition->fileSystem(); const FS::luks* luksFs = dynamic_cast< const FS::luks* >( &fsRef ); if ( luksFs ) { map[ "luksMapperName" ] = luksFs->mapperName().split( "/" ).last(); map[ "luksUuid" ] = getLuksUuid( partition->partitionPath() ); map[ "luksPassphrase" ] = luksFs->passphrase(); deb << TR( "luksMapperName:", map[ "luksMapperName" ].toString() ); } } return map; } 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 ) { } QString FillGlobalStorageJob::prettyName() const { return tr( "Set partition information" ); } QString FillGlobalStorageJob::prettyDescription() const { QStringList lines; const auto partitionList = createPartitionList(); for ( const QVariant& partitionItem : partitionList ) { if ( partitionItem.type() == QVariant::Map ) { QVariantMap partitionMap = partitionItem.toMap(); QString path = partitionMap.value( "device" ).toString(); QString mountPoint = partitionMap.value( "mountPoint" ).toString(); QString fsType = partitionMap.value( "fs" ).toString(); QString features = prettyFileSystemFeatures( partitionMap.value( "features" ).toMap() ); if ( mountPoint.isEmpty() || fsType.isEmpty() || fsType == QString( "unformatted" ) ) { continue; } if ( path.isEmpty() ) { if ( mountPoint == "/" ) { 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 { 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 == "/" ) { 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 { 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() ) ); } } } } } QVariant bootloaderMap = createBootLoaderMap(); if ( !m_bootLoaderPath.isEmpty() ) { lines.append( tr( "Install boot loader on %1." ).arg( m_bootLoaderPath ) ); } return lines.join( "
" ); } QString FillGlobalStorageJob::prettyStatusMessage() const { return tr( "Setting up mount points." ); } /** @brief note which FS'ses are in use in GS * * .. 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 "filesystem_use" with this mapping. * @see CalamaresUtils::Partition::useFilesystemGS() */ static void storeFSUse( Calamares::GlobalStorage* storage, const QVariantList& partitions ) { if ( storage ) { CalamaresUtils::Partition::clearFilesystemGS( storage ); for ( const auto& p : partitions ) { const auto pmap = p.toMap(); QString fs = pmap.value( "fs" ).toString(); if ( fs.isEmpty() ) { continue; } CalamaresUtils::Partition::useFilesystemGS( storage, fs, true ); } } } Calamares::JobResult FillGlobalStorageJob::exec() { Calamares::GlobalStorage* storage = Calamares::JobQueue::instance()->globalStorage(); const auto partitions = createPartitionList(); cDebug() << "Saving partition information map to GlobalStorage[\"partitions\"]"; storage->insert( "partitions", partitions ); storeFSUse( storage, partitions ); if ( !m_bootLoaderPath.isEmpty() ) { QVariant var = createBootLoaderMap(); if ( !var.isValid() ) { cDebug() << "Failed to find path for boot loader"; } cDebug() << "FillGlobalStorageJob writing bootLoader path:" << var; storage->insert( "bootLoader", var ); } else { cDebug() << "FillGlobalStorageJob writing empty bootLoader value"; storage->insert( "bootLoader", QVariant() ); } return Calamares::JobResult::ok(); } QVariantList FillGlobalStorageJob::createPartitionList() const { UuidForPartitionHash hash = findPartitionUuids( m_devices ); QVariantList lst; cDebug() << "Building partition information map"; for ( auto device : m_devices ) { cDebug() << Logger::SubEntry << "partitions on" << device->deviceNode(); for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it ) { // Debug-logging is done when creating the map lst << mapForPartition( *it, hash.value( ( *it )->partitionPath() ) ); } } return lst; } QVariant FillGlobalStorageJob::createBootLoaderMap() const { QVariantMap map; QString path = m_bootLoaderPath; if ( !path.startsWith( "/dev/" ) ) { Partition* partition = KPMHelpers::findPartitionByMountPoint( m_devices, path ); if ( !partition ) { return QVariant(); } path = partition->partitionPath(); } map[ "installPath" ] = path; return map; } calamares-3.2.41.1/src/modules/partition/jobs/FillGlobalStorageJob.h000066400000000000000000000024471410275732300252500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef FILLGLOBALSTORAGEJOB_H #define FILLGLOBALSTORAGEJOB_H #include "Job.h" #include #include class Config; class Device; class Partition; /** * This job does not touch devices. It inserts in GlobalStorage the * partition-related keys (see hacking/GlobalStorage.md) * * Inserting the keys after partitioning makes it possible to access * information such as the partition path or the UUID. */ class FillGlobalStorageJob : public Calamares::Job { Q_OBJECT public: FillGlobalStorageJob( const Config* config, QList< Device* > devices, const QString& bootLoaderPath ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QList< Device* > m_devices; QString m_bootLoaderPath; QVariantList createPartitionList() const; QVariant createBootLoaderMap() const; }; #endif /* FILLGLOBALSTORAGEJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/FormatPartitionJob.cpp000066400000000000000000000046551410275732300253740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "FormatPartitionJob.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include #include #include #include #include #include using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; FormatPartitionJob::FormatPartitionJob( Device* device, Partition* partition ) : PartitionJob( partition ) , m_device( device ) { } QString FormatPartitionJob::prettyName() const { return tr( "Format partition %1 (file system: %2, size: %3 MiB) on %4." ) .arg( m_partition->partitionPath() ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_partition->capacity() / 1024 / 1024 ) .arg( m_device->name() ); } QString FormatPartitionJob::prettyDescription() const { return tr( "Format %3MiB partition %1 with " "file system %2." ) .arg( m_partition->partitionPath() ) .arg( userVisibleFS( m_partition->fileSystem() ) ) .arg( m_partition->capacity() / 1024 / 1024 ); } QString FormatPartitionJob::prettyStatusMessage() const { return tr( "Formatting partition %1 with " "file system %2." ) .arg( m_partition->partitionPath() ) .arg( 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 ) ) { return Calamares::JobResult::ok(); } return Calamares::JobResult::error( message, report.toText() ); } calamares-3.2.41.1/src/modules/partition/jobs/FormatPartitionJob.h000066400000000000000000000020471410275732300250320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef FORMATPARTITIONJOB_H #define FORMATPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * This job formats an existing partition. * * It is only used for existing partitions: newly created partitions are * formatted by the CreatePartitionJob. */ class FormatPartitionJob : public PartitionJob { Q_OBJECT public: FormatPartitionJob( Device* device, Partition* partition ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; Device* device() const { return m_device; } private: Device* m_device; }; #endif /* FORMATPARTITIONJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/PartitionJob.cpp000066400000000000000000000011201410275732300242030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PartitionJob.h" PartitionJob::PartitionJob( Partition* partition ) : m_partition( partition ) { } void PartitionJob::iprogress( int percent ) { if ( percent < 0 ) { percent = 0; } if ( percent > 100 ) { percent = 100; } Q_EMIT progress( qreal( percent / 100.0 ) ); } calamares-3.2.41.1/src/modules/partition/jobs/PartitionJob.h000066400000000000000000000020541410275732300236570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef PARTITIONJOB_H #define PARTITIONJOB_H #include "Job.h" #include "partition/KPMManager.h" class Partition; /** * Base class for jobs which affect a partition and which use KPMCore. */ class PartitionJob : public Calamares::Job { Q_OBJECT public: PartitionJob( Partition* partition ); Partition* partition() const { return m_partition; } public slots: /** @brief Translate from KPMCore to Calamares progress. * * KPMCore presents progress as an integer percent from 0 .. 100, * while Calamares uses a qreal from 0 .. 1.00 . */ void iprogress( int percent ); protected: CalamaresUtils::Partition::KPMManager m_kpmcore; Partition* m_partition; }; #endif /* PARTITIONJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/RemoveVolumeGroupJob.cpp000066400000000000000000000026151410275732300257060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "RemoveVolumeGroupJob.h" #include #include #include RemoveVolumeGroupJob::RemoveVolumeGroupJob( Device*, LvmDevice* device ) : m_device( device ) { } QString RemoveVolumeGroupJob::prettyName() const { return tr( "Remove Volume Group named %1." ).arg( m_device->name() ); } QString RemoveVolumeGroupJob::prettyDescription() const { return tr( "Remove Volume Group named %1." ).arg( m_device->name() ); } QString RemoveVolumeGroupJob::prettyStatusMessage() const { return tr( "Remove Volume Group named %1." ).arg( m_device->name() ); } 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() ); } calamares-3.2.41.1/src/modules/partition/jobs/RemoveVolumeGroupJob.h000066400000000000000000000015361410275732300253540ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef REMOVEVOLUMEGROUPJOB_H #define REMOVEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" class Device; class LvmDevice; class RemoveVolumeGroupJob : public Calamares::Job { Q_OBJECT public: RemoveVolumeGroupJob( Device*, LvmDevice* device ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; }; #endif // REMOVEVOLUMEGROUPJOB_H calamares-3.2.41.1/src/modules/partition/jobs/ResizePartitionJob.cpp000066400000000000000000000066101410275732300253760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "ResizePartitionJob.h" #include "utils/Units.h" // KPMcore #include #include #include using CalamaresUtils::BytesToMiB; //- ResizePartitionJob --------------------------------------------------------- ResizePartitionJob::ResizePartitionJob( Device* device, Partition* partition, qint64 firstSector, qint64 lastSector ) : PartitionJob( partition ) , m_device( device ) , m_oldFirstSector( partition->firstSector() ) // Keep a copy of old sectors because they will be overwritten in updatePreview() , m_oldLastSector( partition->lastSector() ) , m_newFirstSector( firstSector ) , m_newLastSector( lastSector ) { } QString ResizePartitionJob::prettyName() const { // FIXME: Copy PM ResizeOperation code which generates a description of the // operation return tr( "Resize partition %1." ).arg( partition()->partitionPath() ); } QString ResizePartitionJob::prettyDescription() const { return tr( "Resize %2MiB partition %1 to " "%3MiB." ) .arg( partition()->partitionPath() ) .arg( ( BytesToMiB( m_oldLastSector - m_oldFirstSector + 1 ) * partition()->sectorSize() ) ) .arg( ( BytesToMiB( m_newLastSector - m_newFirstSector + 1 ) * partition()->sectorSize() ) ); } QString ResizePartitionJob::prettyStatusMessage() const { return tr( "Resizing %2MiB partition %1 to " "%3MiB." ) .arg( partition()->partitionPath() ) .arg( ( BytesToMiB( m_oldLastSector - m_oldFirstSector + 1 ) * partition()->sectorSize() ) ) .arg( ( BytesToMiB( m_newLastSector - m_newFirstSector + 1 ) * partition()->sectorSize() ) ); } 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() ); } void ResizePartitionJob::updatePreview() { m_device->partitionTable()->removeUnallocated(); m_partition->parent()->remove( m_partition ); m_partition->setFirstSector( m_newFirstSector ); m_partition->setLastSector( m_newLastSector ); m_partition->parent()->insert( m_partition ); m_device->partitionTable()->updateUnallocated( *m_device ); } Device* ResizePartitionJob::device() const { return m_device; } calamares-3.2.41.1/src/modules/partition/jobs/ResizePartitionJob.h000066400000000000000000000022431410275732300250410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-FileCopyrightText: 2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef RESIZEPARTITIONJOB_H #define RESIZEPARTITIONJOB_H #include "PartitionJob.h" class Device; class Partition; class FileSystem; /** * This job resizes an existing partition. * * It can grow, shrink and/or move a partition while preserving its content. */ class ResizePartitionJob : public PartitionJob { Q_OBJECT public: ResizePartitionJob( Device* device, Partition* partition, qint64 firstSector, qint64 lastSector ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; void updatePreview(); Device* device() const; private: Device* m_device; qint64 m_oldFirstSector; qint64 m_oldLastSector; qint64 m_newFirstSector; qint64 m_newLastSector; }; #endif /* RESIZEPARTITIONJOB_H */ calamares-3.2.41.1/src/modules/partition/jobs/ResizeVolumeGroupJob.cpp000066400000000000000000000044571410275732300257200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ResizeVolumeGroupJob.h" // KPMcore #include #include #include #include ResizeVolumeGroupJob::ResizeVolumeGroupJob( Device*, LvmDevice* device, QVector< const Partition* >& partitionList ) : m_device( device ) , m_partitionList( partitionList ) { } QString ResizeVolumeGroupJob::prettyName() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } QString ResizeVolumeGroupJob::prettyDescription() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } QString ResizeVolumeGroupJob::prettyStatusMessage() const { return tr( "Resize volume group named %1 from %2 to %3." ) .arg( m_device->name() ) .arg( currentPartitions() ) .arg( targetPartitions() ); } 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() ); } QString ResizeVolumeGroupJob::currentPartitions() const { QString result; for ( const Partition* p : m_device->physicalVolumes() ) { result += p->deviceNode() + ", "; } result.chop( 2 ); return result; } QString ResizeVolumeGroupJob::targetPartitions() const { QString result; for ( const Partition* p : m_partitionList ) { result += p->deviceNode() + ", "; } result.chop( 2 ); return result; } calamares-3.2.41.1/src/modules/partition/jobs/ResizeVolumeGroupJob.h000066400000000000000000000020671410275732300253600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Caio Jordão Carvalho * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef RESIZEVOLUMEGROUPJOB_H #define RESIZEVOLUMEGROUPJOB_H #include "Job.h" #include "partition/KPMManager.h" #include class Device; class LvmDevice; class Partition; class ResizeVolumeGroupJob : public Calamares::Job { Q_OBJECT public: ResizeVolumeGroupJob( Device*, LvmDevice* device, QVector< const Partition* >& partitionList ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: QString currentPartitions() const; QString targetPartitions() const; private: CalamaresUtils::Partition::KPMManager m_kpmcore; LvmDevice* m_device; QVector< const Partition* > m_partitionList; }; #endif // RESIZEVOLUMEGROUPJOB_H calamares-3.2.41.1/src/modules/partition/jobs/SetPartitionFlagsJob.cpp000066400000000000000000000123051410275732300256430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 * * Calamares is Free Software: see the License-Identifier above. * */ #include "SetPartitionFlagsJob.h" #include "partition/FileSystem.h" #include "utils/Logger.h" #include "utils/Units.h" #include #include #include #include #include using CalamaresUtils::BytesToMiB; using CalamaresUtils::Partition::untranslatedFS; using CalamaresUtils::Partition::userVisibleFS; SetPartFlagsJob::SetPartFlagsJob( Device* device, Partition* partition, PartitionTable::Flags flags ) : PartitionJob( partition ) , m_device( device ) , m_flags( flags ) { } QString SetPartFlagsJob::prettyName() const { if ( !partition()->partitionPath().isEmpty() ) { return tr( "Set flags on partition %1." ).arg( partition()->partitionPath() ); } QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) { return tr( "Set flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); } return tr( "Set flags on new partition." ); } QString SetPartFlagsJob::prettyDescription() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) { if ( !partition()->partitionPath().isEmpty() ) { return tr( "Clear flags on partition %1." ).arg( partition()->partitionPath() ); } QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) { return tr( "Clear flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); } return tr( "Clear flags on new partition." ); } if ( !partition()->partitionPath().isEmpty() ) { return tr( "Flag partition %1 as " "%2." ) .arg( partition()->partitionPath() ) .arg( flagsList.join( ", " ) ); } QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) { return tr( "Flag %1MiB %2 partition as " "%3." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ) .arg( flagsList.join( ", " ) ); } return tr( "Flag new partition as %1." ).arg( flagsList.join( ", " ) ); } QString SetPartFlagsJob::prettyStatusMessage() const { QStringList flagsList = PartitionTable::flagNames( m_flags ); if ( flagsList.count() == 0 ) { if ( !partition()->partitionPath().isEmpty() ) { return tr( "Clearing flags on partition %1." ).arg( partition()->partitionPath() ); } QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) { return tr( "Clearing flags on %1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ); } return tr( "Clearing flags on new partition." ); } if ( !partition()->partitionPath().isEmpty() ) { return tr( "Setting flags %2 on partition " "%1." ) .arg( partition()->partitionPath() ) .arg( flagsList.join( ", " ) ); } QString fsNameForUser = userVisibleFS( partition()->fileSystem() ); if ( !fsNameForUser.isEmpty() ) { return tr( "Setting flags %3 on " "%1MiB %2 partition." ) .arg( BytesToMiB( partition()->capacity() ) ) .arg( fsNameForUser ) .arg( flagsList.join( ", " ) ); } return tr( "Setting flags %1 on new partition." ).arg( flagsList.join( ", " ) ); } Calamares::JobResult SetPartFlagsJob::exec() { 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() ); } calamares-3.2.41.1/src/modules/partition/jobs/SetPartitionFlagsJob.h000066400000000000000000000021051410275732300253050ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Based on the SetPartFlagsJob class from KDE Partition Manager, * SPDX-FileCopyrightText: 2008 2010, Volker Lanz * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SETPARTITIONFLAGSJOB_H #define SETPARTITIONFLAGSJOB_H #include "PartitionJob.h" #include class Device; class Partition; /** * This job changes the flags on an existing partition. */ class SetPartFlagsJob : public PartitionJob { Q_OBJECT public: SetPartFlagsJob( Device* device, Partition* partition, PartitionTable::Flags flags ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; Device* device() const; private: Device* m_device; PartitionTable::Flags m_flags; }; #endif // SETPARTITIONFLAGSJOB_H calamares-3.2.41.1/src/modules/partition/partition.conf000066400000000000000000000240031410275732300230230ustar00rootroot00000000000000# 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. # 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 # one choice, a UI is presented. # # Legacy settings *neverCreateSwap* and *ensureSuspendToDisk* correspond # to values of *userSwapChoices* as follows: # - *neverCreateSwap* is true, means [none] # - *neverCreateSwap* is false, *ensureSuspendToDisk* is false, [small] # - *neverCreateSwap* is false, *ensureSuspendToDisk* is true, [suspend] # # Autogenerated swap sizes are as follows: # - *suspend*: Swap is always at least total memory size, # and up to 4GiB RAM follows the rule-of-thumb 2 * memory; # from 4GiB to 8 GiB it stays steady at 8GiB, and over 8 GiB memory # swap is the size of main memory. # - *small*: Follows the rules above, but Swap is at # most 8GiB, and no more than 10% of available disk. # 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 - small # Up to 4GB - suspend # At least main memory size # - 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 # neverCreateSwap: false # Correctly draw nested (e.g. logical) partitions as such. 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 # partition is retained. In other cases, e.g. Erase and Alongside, # as well as when using manual partitioning and creating a new # partition, this filesystem type is pre-selected. Note that # editing a partition in manual-creation mode will not automatically # change the filesystem type to this default value -- it is not # creating a new partition. # # Suggested values: ext2, ext3, ext4, reiser, xfs, jfs, btrfs # If nothing is specified, Calamares defaults to "ext4". # # 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. # # BIG FAT WARNING: # # This option is unsupported, as it cuts out a crucial security feature. # Disabling LUKS and shipping Calamares without a correctly configured GRUB2 # and initramfs is considered suboptimal use of the Calamares software. The # Calamares team will not provide user support for any potential issue that # 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. # 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 # Partition layout. # # This optional setting specifies a custom partition layout. # # 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" # type: "4f68bce3-e8cd-4db1-96e7-fbcaf984b709" # filesystem: "ext4" # mountPoint: "/" # size: 20% # minSize: 500M # maxSize: 10G # attributes: 0xffff000000000003 # - name: "home" # type = "933ac7e1-2eb4-4f13-b844-0e14e2aef915" # filesystem: "ext4" # mountPoint: "/home" # size: 3G # minSize: 1.5G # features: # 64bit: false # casefold: true # - name: "data" # filesystem: "fat32" # mountPoint: "/data" # features: # sector-size: 4096 # sectors-per-cluster: 128 # size: 100% # # There can be any number of partitions, each entry having the following attributes: # - 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) # - 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 # - minSize: minimum partition size (optional parameter) # - maxSize: maximum partition size (optional parameter) # - features: filesystem features (optional parameter; requires KPMCore >= 4.2.0) # name: boolean or integer or string # Checking for available storage # # This overlaps with the setting of the same name in the welcome module's # requirements section. If nothing is set by the welcome module, this # value is used instead. It is still a problem if there is no required # size set at all, and the replace and resize options will not be offered # if no required size is set. # # The value is in Gibibytes (GiB). # # BIG FAT WARNING: except for OEM-phase-0 use, you should be using # the welcome module, **and** configure this value in # `welcome.conf`, not here. # requiredStorage: 3.5 calamares-3.2.41.1/src/modules/partition/partition.schema.yaml000066400000000000000000000025141410275732300243020ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/partition/tests/000077500000000000000000000000001410275732300213065ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/partition/tests/AutoMountTests.cpp000066400000000000000000000045061410275732300247750ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/modules/partition/tests/CMakeLists.txt000066400000000000000000000035761410275732300240610ustar00rootroot00000000000000# === 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 .. ) include_directories( ${Qt5Gui_INCLUDE_DIRS} ${PartitionModule_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) calamares_add_test( partitionjobtests SOURCES PartitionJobTests.cpp ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionTableJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/DeletePartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/PartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/ResizePartitionJob.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares_add_test( clearmountsjobtests SOURCES ${PartitionModule_SOURCE_DIR}/jobs/ClearMountsJob.cpp ClearMountsJobTests.cpp LIBRARIES kpmcore DEFINITIONS ${_partition_defs} ) calamares_add_test( createlayoutstests SOURCES ${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 CreateLayoutsTests.cpp LIBRARIES kpmcore calamares calamaresui Qt5::Gui DEFINITIONS ${_partition_defs} ) calamares_add_test( automounttests SOURCES ${PartitionModule_SOURCE_DIR}/jobs/AutoMountManagementJob.cpp AutoMountTests.cpp LIBRARIES calamares ) calamares-3.2.41.1/src/modules/partition/tests/ClearMountsJobTests.cpp000066400000000000000000000030741410275732300257300ustar00rootroot00000000000000/* === 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 "ClearMountsJobTests.h" #include "utils/Logger.h" #include QTEST_GUILESS_MAIN( ClearMountsJobTests ) /* Not exactly public API */ QStringList getPartitionsForDevice( const QString& deviceName ); QStringList 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.start(); process.waitForFinished(); const QString partitions = process.readAllStandardOutput().trimmed(); if ( partitions.isEmpty() ) { return QStringList(); } const QStringList partitionsList = partitions.simplified().split( ' ' ); return partitionsList; } ClearMountsJobTests::ClearMountsJobTests() { Logger::setupLogLevel( Logger::LOGDEBUG ); } void ClearMountsJobTests::testFindPartitions() { QStringList partitions = getPartitionsForDevice( "sda" ); QStringList other_part = getPartitionsForDevice_other( "sda" ); cDebug() << "Initial implementation:" << Logger::DebugList( partitions ); cDebug() << "Other implementation:" << Logger::DebugList( other_part ); QCOMPARE( partitions, other_part ); } calamares-3.2.41.1/src/modules/partition/tests/ClearMountsJobTests.h000066400000000000000000000007601410275732300253740ustar00rootroot00000000000000/* === 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 CLEARMOUNTSJOBTESTS_H #define CLEARMOUNTSJOBTESTS_H #include class ClearMountsJobTests : public QObject { Q_OBJECT public: ClearMountsJobTests(); private Q_SLOTS: void testFindPartitions(); }; #endif calamares-3.2.41.1/src/modules/partition/tests/CreateLayoutsTests.cpp000066400000000000000000000110101410275732300256120ustar00rootroot00000000000000/* === 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() {} calamares-3.2.41.1/src/modules/partition/tests/CreateLayoutsTests.h000066400000000000000000000015571410275732300252760ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/partition/tests/PartitionJobTests.cpp000066400000000000000000000350131410275732300254430ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "PartitionJobTests.h" #include "core/KPMHelpers.h" #include "jobs/CreatePartitionJob.h" #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 QTEST_GUILESS_MAIN( PartitionJobTests ) using namespace Calamares; using namespace CalamaresUtils::Units; class PartitionMounter { public: PartitionMounter( const QString& devicePath ) : m_mountPointDir( "calamares-partitiontests-mountpoint" ) { QStringList args = QStringList() << devicePath << m_mountPointDir.path(); int ret = QProcess::execute( "mount", args ); m_mounted = ret == 0; QCOMPARE( ret, 0 ); } ~PartitionMounter() { if ( !m_mounted ) { return; } int ret = QProcess::execute( "umount", QStringList() << m_mountPointDir.path() ); QCOMPARE( ret, 0 ); } QString mountPoint() const { return m_mounted ? m_mountPointDir.path() : QString(); } private: QString m_devicePath; QTemporaryDir m_mountPointDir; bool m_mounted; }; /// @brief Generate random data of given @p size as a QByteArray static QByteArray generateTestData( qint64 size ) { QByteArray ba; ba.resize( static_cast< int >( size ) ); // Fill the array explicitly to keep Valgrind happy for ( auto it = ba.data(); it < ba.data() + size; ++it ) { *it = char( rand() & 0xff ); } return ba; } static void writeFile( const QString& path, const QByteArray data ) { QFile file( path ); QVERIFY( file.open( QIODevice::WriteOnly ) ); const char* ptr = data.constData(); const char* end = data.constData() + data.size(); const qint64 chunkSize = 16384; while ( ptr < end ) { qint64 count = file.write( ptr, chunkSize ); if ( count < 0 ) { QString msg = QString( "Writing file failed. Only %1 bytes written out of %2. Error: '%3'." ) .arg( ptr - data.constData() ) .arg( data.size() ) .arg( file.errorString() ); QFAIL( qPrintable( msg ) ); } ptr += count; } } static Partition* firstFreePartition( PartitionNode* parent ) { for ( auto child : parent->children() ) if ( CalamaresUtils::Partition::isPartitionFreeSpace( child ) ) { return child; } return nullptr; } //- QueueRunner --------------------------------------------------------------- QueueRunner::QueueRunner( JobQueue* queue ) : m_queue( queue ) , m_finished( false ) // Same initalizations as in ::run() , m_success( true ) { connect( m_queue, &JobQueue::finished, this, &QueueRunner::onFinished ); connect( m_queue, &JobQueue::failed, this, &QueueRunner::onFailed ); } QueueRunner::~QueueRunner() { // Nothing to do. We don't own the queue, and disconnect happens automatically } bool QueueRunner::run() { m_finished = false; m_success = true; m_queue->start(); QEventLoop loop; while ( !m_finished ) { loop.processEvents(); } return m_success; } void QueueRunner::onFinished() { m_finished = true; } void QueueRunner::onFailed( const QString& message, const QString& details ) { m_success = false; QString msg = message + "\ndetails: " + details; QFAIL( qPrintable( msg ) ); } static CalamaresUtils::Partition::KPMManager* kpmcore = nullptr; //- PartitionJobTests ------------------------------------------------------------------ PartitionJobTests::PartitionJobTests() : m_runner( &m_queue ) { } void PartitionJobTests::initTestCase() { QString devicePath = qgetenv( "CALAMARES_TEST_DISK" ); if ( devicePath.isEmpty() ) { // The 0 is to keep the macro parameters happy QSKIP( "Skipping test, CALAMARES_TEST_DISK is not set. It should point to a disk which can be safely formatted", 0 ); } kpmcore = new CalamaresUtils::Partition::KPMManager(); FileSystemFactory::init(); refreshDevice(); } void PartitionJobTests::cleanupTestCase() { delete kpmcore; } void PartitionJobTests::refreshDevice() { QString devicePath = qgetenv( "CALAMARES_TEST_DISK" ); m_device.reset( kpmcore->backend()->scanDevice( devicePath ) ); QVERIFY( !m_device.isNull() ); } void PartitionJobTests::testPartitionTable() { queuePartitionTableCreation( PartitionTable::msdos ); QVERIFY( m_runner.run() ); QVERIFY( m_device->partitionTable() ); QVERIFY( firstFreePartition( m_device->partitionTable() ) ); queuePartitionTableCreation( PartitionTable::gpt ); QVERIFY( m_runner.run() ); QVERIFY( m_device->partitionTable() ); QVERIFY( firstFreePartition( m_device->partitionTable() ) ); } void PartitionJobTests::queuePartitionTableCreation( PartitionTable::TableType type ) { auto job = new CreatePartitionTableJob( m_device.data(), type ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); } CreatePartitionJob* PartitionJobTests::newCreatePartitionJob( Partition* freeSpacePartition, PartitionRole role, FileSystem::Type type, qint64 size ) { Q_ASSERT( freeSpacePartition ); qint64 firstSector = freeSpacePartition->firstSector(); qint64 lastSector; if ( size > 0 ) { lastSector = firstSector + size / m_device->logicalSize(); } else { lastSector = freeSpacePartition->lastSector(); } FileSystem* fs = FileSystemFactory::create( type, firstSector, lastSector, m_device->logicalSize() ); Partition* partition = new Partition( freeSpacePartition->parent(), *m_device, role, fs, firstSector, lastSector, QString() /* path */, KPM_PARTITION_FLAG( None ) /* availableFlags */, QString() /* mountPoint */, false /* mounted */, KPM_PARTITION_FLAG( None ) /* activeFlags */, KPM_PARTITION_STATE( New ) ); return new CreatePartitionJob( m_device.data(), partition ); } void PartitionJobTests::testCreatePartition() { queuePartitionTableCreation( PartitionTable::gpt ); CreatePartitionJob* job; Partition* freePartition; freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1_MiB ); Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1_MiB ); Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1_MiB ); Partition* partition3 = job->partition(); QVERIFY( partition3 ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); // Check partitionPath has been set. It is not known until the job has // executed. QString devicePath = m_device->deviceNode(); QCOMPARE( partition1->partitionPath(), devicePath + "1" ); QCOMPARE( partition2->partitionPath(), devicePath + "2" ); QCOMPARE( partition3->partitionPath(), devicePath + "3" ); } void PartitionJobTests::testCreatePartitionExtended() { queuePartitionTableCreation( PartitionTable::msdos ); CreatePartitionJob* job; Partition* freePartition; freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10_MiB ); Partition* partition1 = job->partition(); QVERIFY( partition1 ); job->updatePreview(); 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( 1, JobList() << job_ptr( job ) ); Partition* extendedPartition = job->partition(); freePartition = firstFreePartition( extendedPartition ); QVERIFY( freePartition ); job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Logical ), FileSystem::Ext4, 0 ); Partition* partition2 = job->partition(); QVERIFY( partition2 ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); // Check partitionPath has been set. It is not known until the job has // executed. QString devicePath = m_device->deviceNode(); QCOMPARE( partition1->partitionPath(), devicePath + "1" ); QCOMPARE( extendedPartition->partitionPath(), devicePath + "2" ); QCOMPARE( partition2->partitionPath(), devicePath + "5" ); } void PartitionJobTests::testResizePartition_data() { QTest::addColumn< unsigned int >( "oldStartMiB" ); QTest::addColumn< unsigned int >( "oldSizeMiB" ); QTest::addColumn< unsigned int >( "newStartMiB" ); QTest::addColumn< unsigned int >( "newSizeMiB" ); QTest::newRow( "grow" ) << 10 << 50 << 10 << 70; QTest::newRow( "shrink" ) << 10 << 70 << 10 << 50; QTest::newRow( "moveLeft" ) << 10 << 50 << 8 << 50; QTest::newRow( "moveRight" ) << 10 << 50 << 12 << 50; } void PartitionJobTests::testResizePartition() { QFETCH( unsigned int, oldStartMiB ); QFETCH( unsigned int, oldSizeMiB ); QFETCH( unsigned int, newStartMiB ); QFETCH( unsigned int, newSizeMiB ); const qint64 sectorsPerMiB = 1_MiB / m_device->logicalSize(); qint64 oldFirst = sectorsPerMiB * oldStartMiB; qint64 oldLast = oldFirst + sectorsPerMiB * oldSizeMiB - 1; qint64 newFirst = sectorsPerMiB * newStartMiB; qint64 newLast = newFirst + sectorsPerMiB * newSizeMiB - 1; // Make the test data file smaller than the full size of the partition to // accomodate for the file system overhead const unsigned long long minSizeMiB = qMin( oldSizeMiB, newSizeMiB ); const QByteArray testData = generateTestData( CalamaresUtils::MiBtoBytes( minSizeMiB ) * 3 / 4 ); const QString testName = "test.data"; // Setup: create the test partition { queuePartitionTableCreation( PartitionTable::msdos ); Partition* freePartition = firstFreePartition( m_device->partitionTable() ); QVERIFY( freePartition ); Partition* partition = KPMHelpers::createNewPartition( freePartition->parent(), *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( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); } { // Write a test file in the partition refreshDevice(); QVERIFY( m_device->partitionTable() ); Partition* partition = m_device->partitionTable()->findPartitionBySector( oldFirst, PartitionRole( PartitionRole::Primary ) ); QVERIFY( partition ); QCOMPARE( partition->firstSector(), oldFirst ); QCOMPARE( partition->lastSector(), oldLast ); { PartitionMounter mounter( partition->partitionPath() ); QString mountPoint = mounter.mountPoint(); QVERIFY( !mountPoint.isEmpty() ); writeFile( mountPoint + '/' + testName, testData ); } // Resize ResizePartitionJob* job = new ResizePartitionJob( m_device.data(), partition, newFirst, newLast ); job->updatePreview(); m_queue.enqueue( 1, JobList() << job_ptr( job ) ); QVERIFY( m_runner.run() ); QCOMPARE( partition->firstSector(), newFirst ); QCOMPARE( partition->lastSector(), newLast ); } // Test { refreshDevice(); QVERIFY( m_device->partitionTable() ); Partition* partition = m_device->partitionTable()->findPartitionBySector( newFirst, PartitionRole( PartitionRole::Primary ) ); QVERIFY( partition ); QCOMPARE( partition->firstSector(), newFirst ); QCOMPARE( partition->lastSector(), newLast ); QCOMPARE( partition->fileSystem().firstSector(), newFirst ); QCOMPARE( partition->fileSystem().lastSector(), newLast ); PartitionMounter mounter( partition->partitionPath() ); QString mountPoint = mounter.mountPoint(); QVERIFY( !mountPoint.isEmpty() ); { QFile file( mountPoint + '/' + testName ); QVERIFY( file.open( QIODevice::ReadOnly ) ); QByteArray outData = file.readAll(); QCOMPARE( outData.size(), testData.size() ); QCOMPARE( outData, testData ); } } } calamares-3.2.41.1/src/modules/partition/tests/PartitionJobTests.h000066400000000000000000000030021410275732300251010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Aurélien Gâteau * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PARTITIONJOBTESTS_H #define PARTITIONJOBTESTS_H #include "JobQueue.h" #include "partition/KPMHelper.h" // Qt #include #include class QueueRunner : public QObject { public: QueueRunner( Calamares::JobQueue* queue ); ~QueueRunner() override; /** * Synchronously runs the queue. Returns true on success */ bool run(); private: void onFailed( const QString& message, const QString& details ); void onFinished(); Calamares::JobQueue* m_queue; bool m_finished; bool m_success; }; class PartitionJobTests : public QObject { Q_OBJECT public: PartitionJobTests(); private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void testPartitionTable(); void testCreatePartition(); void testCreatePartitionExtended(); void testResizePartition_data(); void testResizePartition(); private: QScopedPointer< Device > m_device; Calamares::JobQueue m_queue; QueueRunner m_runner; void queuePartitionTableCreation( PartitionTable::TableType type ); CreatePartitionJob* newCreatePartitionJob( Partition* freeSpacePartition, PartitionRole, FileSystem::Type type, qint64 size ); void refreshDevice(); }; #endif /* PARTITIONJOBTESTS_H */ calamares-3.2.41.1/src/modules/plasmalnf/000077500000000000000000000000001410275732300201105ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/plasmalnf/CMakeLists.txt000066400000000000000000000030241410275732300226470ustar00rootroot00000000000000# === 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 # needs a runtime support component (which we don't test for). set( lnf_ver 5.41 ) find_package( KF5Config ${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" ) if ( KF5Plasma_FOUND AND KF5Package_FOUND ) calamares_add_plugin( plasmalnf TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO COMPILE_DEFINITIONS ${option_defs} SOURCES Config.cpp PlasmaLnfViewStep.cpp PlasmaLnfPage.cpp PlasmaLnfJob.cpp ThemeInfo.cpp RESOURCES page_plasmalnf.qrc UI page_plasmalnf.ui LINK_PRIVATE_LIBRARIES KF5::Package KF5::Plasma SHARED_LIB ) if ( KF5Config_FOUND ) target_compile_definitions(calamares_viewmodule_plasmalnf PRIVATE WITH_KCONFIG) endif() else() calamares_skip_module( "plasmalnf (missing requirements)" ) endif() calamares-3.2.41.1/src/modules/plasmalnf/Config.cpp000066400000000000000000000106511410275732300220240ustar00rootroot00000000000000/* === 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 ); } calamares-3.2.41.1/src/modules/plasmalnf/Config.h000066400000000000000000000041511410275732300214670ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfJob.cpp000066400000000000000000000041211410275732300231220ustar00rootroot00000000000000/* === 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 "PlasmaLnfJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #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() {} QString PlasmaLnfJob::prettyName() const { return tr( "Plasma Look-and-Feel Job" ); } Calamares::JobResult PlasmaLnfJob::exec() { auto* system = CalamaresUtils::System::instance(); auto* gs = Calamares::JobQueue::instance()->globalStorage(); 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" ) ); } #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(); } calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfJob.h000066400000000000000000000013011410275732300225640ustar00rootroot00000000000000/* === 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. * */ #ifndef PLASMALNFJOB_H #define PLASMALNFJOB_H #include #include #include "Job.h" class PlasmaLnfJob : public Calamares::Job { Q_OBJECT public: explicit PlasmaLnfJob( const QString& lnfPath, const QString& id ); ~PlasmaLnfJob() override; QString prettyName() const override; Calamares::JobResult exec() override; private: QString m_lnfPath; QString m_id; }; #endif // PLASMALNFJOB_H calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfPage.cpp000066400000000000000000000110741410275732300232710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-FileCopyrightText: 2019 Collabora Ltd * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PlasmaLnfPage.h" #include "Config.h" #include "ui_page_plasmalnf.h" #include "Settings.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include #include 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() }; } void ThemeDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { 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(); // 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 ); 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 ); 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( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::PlasmaLnfPage ) , m_config( config ) { ui->setupUi( this ); 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." ) ); 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." ) ); } ); 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 ); } } } ); } calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfPage.h000066400000000000000000000015351410275732300227370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PLASMALNFPAGE_H #define PLASMALNFPAGE_H #include namespace Ui { class PlasmaLnfPage; } class Config; /** @brief Page for selecting a Plasma Look-and-Feel theme. * * You must call setEnabledThemes -- either overload -- once * to get the selection widgets. Note that calling that with * an empty list will result in zero (0) selectable themes. */ class PlasmaLnfPage : public QWidget { Q_OBJECT public: explicit PlasmaLnfPage( Config* config, QWidget* parent = nullptr ); private: Ui::PlasmaLnfPage* ui; Config* m_config; }; #endif //PLASMALNFPAGE_H calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfViewStep.cpp000066400000000000000000000031121410275732300241550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "PlasmaLnfViewStep.h" #include "Config.h" #include "PlasmaLnfPage.h" #include "ThemeInfo.h" #include "utils/Logger.h" #include "utils/Variant.h" #include CALAMARES_PLUGIN_FACTORY_DEFINITION( PlasmaLnfViewStepFactory, registerPlugin< PlasmaLnfViewStep >(); ) PlasmaLnfViewStep::PlasmaLnfViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( new PlasmaLnfPage( m_config ) ) { emit nextStatusChanged( false ); } PlasmaLnfViewStep::~PlasmaLnfViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString PlasmaLnfViewStep::prettyName() const { return tr( "Look-and-Feel" ); } QWidget* PlasmaLnfViewStep::widget() { return m_widget; } bool PlasmaLnfViewStep::isNextEnabled() const { return true; } bool PlasmaLnfViewStep::isBackEnabled() const { return true; } bool PlasmaLnfViewStep::isAtBeginning() const { return true; } bool PlasmaLnfViewStep::isAtEnd() const { return true; } void PlasmaLnfViewStep::onLeave() { } Calamares::JobList PlasmaLnfViewStep::jobs() const { return m_config->createJobs(); } void PlasmaLnfViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/plasmalnf/PlasmaLnfViewStep.h000066400000000000000000000022461410275732300236310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef PLASMALNFVIEWSTEP_H #define PLASMALNFVIEWSTEP_H #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" class Config; class PlasmaLnfPage; class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit PlasmaLnfViewStep( QObject* parent = nullptr ); ~PlasmaLnfViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: Config* m_config; PlasmaLnfPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PlasmaLnfViewStepFactory ) #endif // PLASMALNFVIEWSTEP_H calamares-3.2.41.1/src/modules/plasmalnf/ThemeInfo.cpp000066400000000000000000000174651410275732300225070ustar00rootroot00000000000000/* === 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; } calamares-3.2.41.1/src/modules/plasmalnf/ThemeInfo.h000066400000000000000000000041571410275732300221460ustar00rootroot00000000000000/* === 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. * */ #ifndef PLASMALNF_THEMEINFO_H #define PLASMALNF_THEMEINFO_H #include #include #include class ThemeInfoList; class ThemesModel : public QAbstractListModel { Q_OBJECT public: enum { LabelRole = Qt::DisplayRole, KeyRole = Qt::UserRole, ShownRole, // Should theme be displayed SelectedRole, // Is theme selected DescriptionRole, ImageRole }; 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; }; #endif calamares-3.2.41.1/src/modules/plasmalnf/page_plasmalnf.qrc000066400000000000000000000001061410275732300235650ustar00rootroot00000000000000 view-preview.png calamares-3.2.41.1/src/modules/plasmalnf/page_plasmalnf.ui000066400000000000000000000016171410275732300234250ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> SPDX-License-Identifier: GPL-3.0-or-later PlasmaLnfPage 0 0 799 400 Form Placeholder true calamares-3.2.41.1/src/modules/plasmalnf/plasmalnf.conf000066400000000000000000000070731410275732300227430ustar00rootroot00000000000000# 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 # can also write a LnF configuration to the target user / on # the target system. # # This module should be used once in a view section (to get # the UI) and once in the exec section (to apply the selection # to the target user). It should come **after** the user module # in exec, so that the target user has been created alrady. --- # Full path to the Plasma look-and-feel tool (CLI program # for querying and applying Plasma themes). If this is not # set, no LNF setting will happen. lnftool: "/usr/bin/lookandfeeltool" # For systems where the user Calamares runs as (usually root, # via either sudo or pkexec) has a clean environment, set this # to the originating username; the lnftool will be run through # "sudo -H -u " instead of directly. # # 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, above, # to change that. # # Themes may be listed by id, (e.g. fluffy-bunny, below) or as a theme # and an image (e.g. breeze) which will be used to show a screenshot. # Themes with no image set at all get a "missing screenshot" image; if the # image file is not found, they get a color swatch based on the image name. # # The image may be an absolute path. If it is a relative path, though, # it is searched in the current directory and in the branding directory # (i.e. relative to the directory where your branding.desc lives). # # Valid forms of entries in the *themes* key: # - A single string (unquoted), which is the theme id # - A pair of *theme* and *image* keys, e.g. # ``` # - theme: fluffy-bunny.desktop # image: "fluffy-screenshot.png" # ``` # # The image screenshot is resized to 12x8 the current font size, with # a minimum of 120x80 pixels. This allows the screenshot to scale up # on HiDPI displays where the fonts are larger (in pixels). themes: - org.kde.fuzzy-pig.desktop - theme: org.kde.breeze.desktop image: "breeze.png" - theme: org.kde.breezedark.desktop image: "breeze-dark.png" - org.kde.fluffy-bunny.desktop # 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. # Do this only on Live images where you are reasonably sure # that the user is not going to change the theme out from under # themselves before running the installer. # # If this key is present, its value should be the id of the theme # which should be pre-selected. If absent, empty, or the pre-selected # theme is not found on the live system, no theme will be pre-selected. # # As a special setting, use "*", to try to find the currently- # selected theme by reading the Plasma configuration. This requires # KF5::Config at build- and run-time. preselect: "*" calamares-3.2.41.1/src/modules/plasmalnf/view-preview.png000066400000000000000000000010601410275732300232440ustar00rootroot00000000000000PNG  IHDRxPқ pHYs+IDATxM@MCƂ;p"q&[&dA=tnsLUJ ~.;DQ9fyve^2|>dޱ]Lu1jV4+su,SJUU)eYl7:6(c%I"y$Q2.otܶft:~'sv~W*˹]tʲL,­ZeYZ}_eY%,˛IQd2Qi~XM\?1М[m[E$IT[_#|8vN~v¿~4kj:Zs%?[?ڹ0^]]8ӫwu.{#nsGy.88Lߏ7BK`# sIIENDB`calamares-3.2.41.1/src/modules/plasmalnf/view-preview.png.license000066400000000000000000000001701410275732300246660ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/plasmalnf/view-preview.svg000066400000000000000000000010721410275732300232620ustar00rootroot00000000000000 calamares-3.2.41.1/src/modules/plasmalnf/view-preview.svg.license000066400000000000000000000001701410275732300247010ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/plymouthcfg/000077500000000000000000000000001410275732300204745ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/plymouthcfg/main.py000066400000000000000000000036741410275732300220040ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares from libcalamares.utils import debug, 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 _("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): self.__root = libcalamares.globalstorage.value('rootMountPoint') @property def root(self): return self.__root def setTheme(self): plymouth_theme = libcalamares.job.configuration["plymouth_theme"] target_env_call(["sed", "-e", 's|^.*Theme=.*|Theme=' + plymouth_theme + '|', "-i", "/etc/plymouth/plymouthd.conf"]) def run(self): if detect_plymouth(): if (("plymouth_theme" in libcalamares.job.configuration) and (libcalamares.job.configuration["plymouth_theme"] is not None)): self.setTheme() return None def run(): pc = PlymouthController() return pc.run() calamares-3.2.41.1/src/modules/plymouthcfg/module.desc000066400000000000000000000002331410275732300226170ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "plymouthcfg" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/plymouthcfg/plymouthcfg.conf000066400000000000000000000017351410275732300237120ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Plymouth Configuration Module # # This module can be used to setup the default plymouth theme to # be used with your distribution # # You should only use this module if the plymouth package is installed # on the build configurations of your distribution & the plymouth # theme you want to configure is installed as well. If the unpacked # filesystem configures a plymouth theme already, there is no need # to change it here. --- # Leave this commented if you want to use the default theme # shipped with your distribution configurations. Make sure that # the theme exists in the themes directory of plymouth path. # Debian / Ubuntu comes with themes "joy", "script", "softwaves", # possibly others. Look in /usr/share/plymouth/themes for more. # # Specifying a non-existent theme will leave the plymouth # configuration set to that theme. It is up to plymouth to # deal with that. plymouth_theme: spinfinity calamares-3.2.41.1/src/modules/plymouthcfg/plymouthcfg.schema.yaml000066400000000000000000000004411410275732300251570ustar00rootroot00000000000000# 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 } calamares-3.2.41.1/src/modules/preservefiles/000077500000000000000000000000001410275732300210115ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/preservefiles/CMakeLists.txt000066400000000000000000000007001410275732300235460ustar00rootroot00000000000000# === 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( preservefiles TYPE job EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES PreserveFiles.cpp # REQUIRES mount # To set the rootMountPoint SHARED_LIB EMERGENCY ) calamares-3.2.41.1/src/modules/preservefiles/PreserveFiles.cpp000066400000000000000000000144201410275732300242740ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #include "PreserveFiles.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Permissions.h" #include "utils/Units.h" #include 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 ) { 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 ); } PreserveFiles::PreserveFiles( QObject* parent ) : Calamares::CppJob( parent ) { } PreserveFiles::~PreserveFiles() {} QString PreserveFiles::prettyName() const { return tr( "Saving files for later ..." ); } 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; } 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 ) { 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 ( !Calamares::JobQueue::instance()->globalStorage()->saveJson( dest ) ) { cWarning() << "Could not write a JSON dump of global storage to" << dest; } else { ++count; } } else if ( source.isEmpty() ) { cWarning() << "Skipping unnamed source file for" << dest; } else { if ( copy_file( source, dest ) ) { if ( it.perm.isValid() ) { if ( !it.perm.apply( CalamaresUtils::System::instance()->targetPath( bare_dest ) ) ) { cWarning() << "Could not set attributes of" << bare_dest; } } ++count; } } } return count == m_items.count() ? Calamares::JobResult::ok() : Calamares::JobResult::error( tr( "Not all of the configured files could be preserved." ) ); } void PreserveFiles::setConfigurationMap( const QVariantMap& configurationMap ) { auto files = configurationMap[ "files" ]; if ( !files.isValid() ) { cDebug() << "No 'files' key for preservefiles."; return; } if ( files.type() != QVariant::List ) { cDebug() << "Configuration key 'files' is not a list for preservefiles."; return; } 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, CalamaresUtils::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; } 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, CalamaresUtils::Permissions( perm ), t } ); } } else { cDebug() << "Invalid type for preservefiles, item" << c; } ++c; } } CALAMARES_PLUGIN_FACTORY_DEFINITION( PreserveFilesFactory, registerPlugin< PreserveFiles >(); ) calamares-3.2.41.1/src/modules/preservefiles/PreserveFiles.h000066400000000000000000000021661410275732300237450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * */ #ifndef PRESERVEFILES_H #define PRESERVEFILES_H #include "CppJob.h" #include "DllMacro.h" #include "utils/Permissions.h" #include "utils/PluginFactory.h" #include #include #include class PLUGINDLLEXPORT PreserveFiles : public Calamares::CppJob { Q_OBJECT enum class ItemType { None, Path, Log, Config }; struct Item { QString source; QString dest; CalamaresUtils::Permissions perm; ItemType type; }; using ItemList = QList< Item >; public: explicit PreserveFiles( QObject* parent = nullptr ); ~PreserveFiles() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: ItemList m_items; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PreserveFilesFactory ) #endif // PRESERVEFILES_H calamares-3.2.41.1/src/modules/preservefiles/preservefiles.conf000066400000000000000000000043121410275732300245360ustar00rootroot00000000000000# 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). # - 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: # - *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. # - *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. # # The target filename is modified as follows: # - `@@ROOT@@` is replaced by the path to the target root (may be /) # - `@@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 a JSON dump of the contents of global storage --- files: - /etc/oem-information - from: log dest: /root/install.log perm: root:wheel:644 - from: config dest: /root/install.json perm: root:wheel:400 # 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, # root:root:0400 (highly restrictive) is used. # # perm: "root:root:0400" calamares-3.2.41.1/src/modules/rawfs/000077500000000000000000000000001410275732300172555ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/rawfs/main.py000066400000000000000000000145301410275732300205560ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2019 Collabora Ltd # SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is Free Software: see the License-Identifier above. # import libcalamares import os import stat import subprocess from time import gmtime, strftime, sleep from math import gcd import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Installing data.") def lcm(a, b): """ Computes the Least Common Multiple of 2 numbers """ return a * b / gcd(a, b) def get_device_size(device): """ Returns a filesystem's total size and block size in bytes. For block devices, block size is the device's block size. For other files (fs images), block size is 1 byte. @param device: str Absolute path to the device or filesystem image. @return: tuple(int, int) The filesystem's size and its block size. """ mode = os.stat(device).st_mode if stat.S_ISBLK(mode): basedevice = "" partition = os.path.basename(device) tmp = partition while len(tmp) > 0: tmp = tmp[:-1] if os.path.exists("/sys/block/" + tmp): basedevice = tmp break # Get device block size file = open("/sys/block/" + basedevice + "/queue/hw_sector_size") blocksize = int(file.readline()) file.close() # Get partition size file = open("/sys/block/" + basedevice + "/" + partition + "/size") size = int(file.readline()) * blocksize file.close() else: size = os.path.getsize(device) blocksize = 1 return size, blocksize class RawFSLowSpaceError(Exception): pass class RawFSItem: __slots__ = ['source', 'destination', 'filesystem', 'resize'] def copy(self, current=0, total=1): """ Copies a raw filesystem on a disk partition, and grow it to the full destination partition's size if required. @param current: int The index of the current item in the filesystems list (used for progress reporting) @param total: int The number of items in the filesystems list (used for progress reporting) """ 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) if destsize < srcsize: raise RawFSLowSpaceError return # Compute transfer block size (100x the LCM of the block sizes seems a good fit) blksize = int(100 * lcm(srcblksize, destblksize)) # Execute copy src = open(self.source, "rb") dest = open(self.destination, "wb") buffer = src.read(blksize) while len(buffer) > 0: dest.write(buffer) count += len(buffer) # Compute job progress progress = ((count / srcsize) + (current)) / total libcalamares.job.setprogress(progress) # Read next data block buffer = src.read(blksize) src.close() dest.close() if self.resize: if "ext" in self.filesystem: libcalamares.utils.debug("Resizing filesystem on {}".format(self.destination)) subprocess.run(["e2fsck", "-f", "-y", self.destination]) subprocess.run(["resize2fs", self.destination]) def __init__(self, config, device, fs): libcalamares.utils.debug("Adding an entry for raw copy of {} to {}".format( config["source"], device)) self.source = os.path.realpath(config["source"]) # If source is a mount point, look for the actual device mounted on it if os.path.ismount(self.source): procmounts = open("/proc/mounts", "r") for line in procmounts: if self.source in line.split(): self.source = line.split()[0] break self.destination = device self.filesystem = fs try: self.resize = bool(config["resize"]) except KeyError: self.resize = False 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], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) if ret.returncode == 0: libcalamares.utils.debug("Setting {} UUID to {}".format(item.destination, ret.stdout.rstrip())) gs[gs.index(partition)]["uuid"] = ret.stdout.rstrip() gs[gs.index(partition)]["source"] = item.source libcalamares.globalstorage.remove("partitions") libcalamares.globalstorage.insert("partitions", gs) def run(): """Raw filesystem copy module""" filesystems = list() 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("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"]: if src["mountPoint"] == partition["mountPoint"]: filesystems.append(RawFSItem(src, partition["device"], partition["fs"])) for item in filesystems: try: item.copy(filesystems.index(item), len(filesystems)) except RawFSLowSpaceError: return ("Not enough free space", "{} partition is too small to copy {} on it".format(item.destination, item.source)) update_global_storage(item, partitions) return None calamares-3.2.41.1/src/modules/rawfs/module.desc000066400000000000000000000003321410275732300214000ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # Module metadata file for block-copy jobmodule # Syntax is YAML 1.2 --- type: "job" name: "rawfs" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/rawfs/rawfs.conf000066400000000000000000000022241410275732300212460ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration for the rawfs module: raw filesystem copy to a block device --- # To apply a custom partition layout, it has to be defined as a list of targets. # # For each target, the following attributes must be defined: # * mountPoint: The mount point of the destination device on the installed system # The corresponding block device will automatically be identified and used as the # destination for the operation # * source: The source filesystem; it can be the mount point of a locally (on the # live system) mounted filesystem, a path to a disk image, or a block device # * resize (optional): Expand the destination filesystem to fill the whole # partition at the end of the operation; this works only with ext filesystems # for now targets: - mountPoint: / source: / - mountPoint: /home source: /images/home.img 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 calamares-3.2.41.1/src/modules/rawfs/tests/000077500000000000000000000000001410275732300204175ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/rawfs/tests/1.global000066400000000000000000000003571410275732300217460ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/rawfs/tests/1.job000066400000000000000000000004441410275732300212550ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/rawfs/tests/CMakeTests.txt000066400000000000000000000005251410275732300231650ustar00rootroot00000000000000# 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() calamares-3.2.41.1/src/modules/removeuser/000077500000000000000000000000001410275732300203275ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/removeuser/CMakeLists.txt000066400000000000000000000004741410275732300230740ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares-3.2.41.1/src/modules/removeuser/RemoveUserJob.cpp000066400000000000000000000033351410275732300235660ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "RemoveUserJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include RemoveUserJob::RemoveUserJob( QObject* parent ) : Calamares::CppJob( parent ) { } RemoveUserJob::~RemoveUserJob() {} QString RemoveUserJob::prettyName() const { return tr( "Remove live user from target system" ); } Calamares::JobResult RemoveUserJob::exec() { if ( m_username.isEmpty() ) { cWarning() << "Ignoring an empty username."; return Calamares::JobResult::ok(); } auto* s = CalamaresUtils::System::instance(); auto r = s->targetEnvCommand( { QStringLiteral( "userdel" ), QStringLiteral( "-f" ), // force QStringLiteral( "-r" ), // remove home-dir and mail m_username } ); if ( r.getExitCode() != 0 ) { cWarning() << "Cannot remove user" << m_username << "userdel terminated with exit code" << r.getExitCode(); } return Calamares::JobResult::ok(); } void RemoveUserJob::setConfigurationMap( const QVariantMap& map ) { m_username = CalamaresUtils::getString( map, "username" ); } CALAMARES_PLUGIN_FACTORY_DEFINITION( RemoveUserJobFactory, registerPlugin< RemoveUserJob >(); ) calamares-3.2.41.1/src/modules/removeuser/RemoveUserJob.h000066400000000000000000000016001410275732300232240ustar00rootroot00000000000000/* === 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 REMOVEUSERJOB_H #define REMOVEUSERJOB_H #include "CppJob.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include #include class PLUGINDLLEXPORT RemoveUserJob : public Calamares::CppJob { Q_OBJECT public: explicit RemoveUserJob( QObject* parent = nullptr ); ~RemoveUserJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: QString m_username; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( RemoveUserJobFactory ) #endif // REMOVEUSERJOB_H calamares-3.2.41.1/src/modules/removeuser/removeuser.conf000066400000000000000000000006541410275732300233770ustar00rootroot00000000000000# 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. # # The module never fails; if userdel fails, this is logged # but the module still reports success and installation / setup # continues as normal. --- # Username in the target system to be removed. username: live calamares-3.2.41.1/src/modules/removeuser/removeuser.schema.yaml000066400000000000000000000004611410275732300246470ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/services-openrc/000077500000000000000000000000001410275732300212425ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/services-openrc/main.py000066400000000000000000000120551410275732300225430ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares from libcalamares.utils import target_env_call, warning from os.path import exists, join import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure OpenRC services") class OpenrcController: """ This is the openrc service controller. All of its state comes from global storage and the job configuration at initialization time. """ def __init__(self): self.root = libcalamares.globalstorage.value('rootMountPoint') # Translate the entries in the config to the actions passed to rc-config self.services = dict() self.services["add"] = libcalamares.job.configuration.get('services', []) self.services["del"] = libcalamares.job.configuration.get('disable', []) self.initdDir = libcalamares.job.configuration['initdDir'] self.runlevelsDir = libcalamares.job.configuration['runlevelsDir'] def make_failure_description(self, state, name, runlevel): """ Returns a generic "could not " failure message, specialized for the action @p state and the specific service @p name in @p runlevel. """ if state == "add": description = _("Cannot add service {name!s} to run-level {level!s}.") elif state == "del": description = _("Cannot remove service {name!s} from run-level {level!s}.") else: description = _("Unknown service-action {arg!s} for service {name!s} in run-level {level!s}.") return description.format(arg=state, name=name, level=runlevel) def update(self, state): """ Call rc-update for each service listed in services for the given @p state. rc-update is called with @p state as the command as well. """ for svc in self.services.get(state, []): if isinstance(svc, str): name = svc runlevel = "default" mandatory = False else: name = svc["name"] runlevel = svc.get("runlevel", "default") mandatory = svc.get("mandatory", False) service_path = self.root + self.initdDir + "/" + name runlevel_path = self.root + self.runlevelsDir + "/" + runlevel if exists(service_path): if exists(runlevel_path): ec = target_env_call(["rc-update", state, name, runlevel]) if ec != 0: warning("Cannot {} service {} to {}".format(state, name, runlevel)) warning("rc-update returned error code {!s}".format(ec)) if mandatory: title = _("Cannot modify service") diagnostic = _("rc-update {arg!s} call in chroot returned error code {num!s}.").format(arg=state, num=ec) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) else: warning("Target runlevel {} does not exist for {}.".format(runlevel, name)) if mandatory: title = _("Target runlevel does not exist") diagnostic = _("The path for runlevel {level!s} is {path!s}, which does not exist.").format(level=runlevel, path=runlevel_path) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) else: warning("Target service {} does not exist in {}.".format(name, self.initdDir)) if mandatory: title = _("Target service does not exist") diagnostic = _("The path for service {name!s} is {path!s}, which does not exist.").format(name=name, path=service_path) return (title, self.make_failure_description(state, name, runlevel) + " " + diagnostic ) def run(self): """Run the controller """ for state in ("add", "del"): r = self.update(state) if r is not None: return r def run(): """ Setup services """ return OpenrcController().run() calamares-3.2.41.1/src/modules/services-openrc/module.desc000066400000000000000000000002371410275732300233710ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-openrc" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/services-openrc/services-openrc.conf000066400000000000000000000031151410275732300252200ustar00rootroot00000000000000# 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. # Handle del with care and only use it if absolutely necessary. # # if a service is listed in the conf but is not present/detected on the target system, # or a runlevel does not exist, it will be ignored and skipped; a warning is logged. # --- # initdDir: holds the openrc service directory location initdDir: /etc/init.d # runlevelsDir: holds the runlevels directory location runlevelsDir: /etc/runlevels # services: a list of entries to **enable** # disable: a list of entries to **disable** # # Each entry has three fields: # - name: the service name # - (optional) runlevel: can hold any runlevel present on the target # system; if no runlevel is provided, "default" is assumed. # - (optional) mandatory: if set to true, a failure to modify # the service will result in installation failure, rather than just # a warning. The default is false. # # an entry may also be a single string, which is interpreted # as the name field (runlevel "default" is assumed then, and not-mandatory). # # # Example services and disable settings: # # - add foo1 to default, but it must succeed # # - add foo2 to nonetwork # # - remove foo3 from default # # - remove foo4 from default # services: # - name: foo1 # mandatory: true # - name: foo2 # runlevel: nonetwork # disable: # - name: foo3 # runlevel: default # - foo4 services: [] disable: [] calamares-3.2.41.1/src/modules/services-systemd/000077500000000000000000000000001410275732300214445ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/services-systemd/main.py000066400000000000000000000077341410275732300227550ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import libcalamares import gettext _ = gettext.translation("calamares-python", localedir=libcalamares.utils.gettext_path(), languages=libcalamares.utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Configure systemd services") def systemctl(targets, command, suffix): """ For each entry in @p targets, run "systemctl ", where is the entry's name plus the given @p suffix. (No dot is added between name and suffix; suffix may be empty) Returns a failure message, or None if this was successful. Services that are not mandatory have their failures suppressed silently. """ for svc in targets: if isinstance(svc, str): name = svc mandatory = False else: name = svc["name"] mandatory = svc.get("mandatory", False) ec = libcalamares.utils.target_env_call( ['systemctl', command, "{}{}".format(name, suffix)] ) if ec != 0: libcalamares.utils.warning( "Cannot {} systemd {} {}".format(command, suffix, name) ) libcalamares.utils.warning( "systemctl {} call in chroot returned error code {}".format(command, ec) ) if mandatory: title = _("Cannot modify service") diagnostic = _("systemctl {arg!s} call in chroot returned error code {num!s}.").format(arg=command, num=ec) if command == "enable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "enable" and suffix == ".target": description = _("Cannot enable systemd target {name!s}.") elif command == "disable" and suffix == ".service": description = _("Cannot enable systemd service {name!s}.") elif command == "disable" and suffix == ".target": description = _("Cannot disable systemd target {name!s}.") elif command == "mask": description = _("Cannot mask systemd unit {name!s}.") else: description = _("Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}.") return (title, description.format(name=name, command=command, suffix=suffix) + " " + diagnostic ) return None def run(): """ Setup systemd services """ cfg = libcalamares.job.configuration # note that the "systemctl enable" and "systemctl disable" commands used # here will work in a chroot; in fact, they are the only systemctl commands # that support that, see: # http://0pointer.de/blog/projects/changing-roots.html r = systemctl(cfg.get("services", []), "enable", ".service") if r is not None: return r r = systemctl(cfg.get("targets", []), "enable", ".target") if r is not None: return r r = systemctl(cfg.get("disable", []), "disable", ".service") if r is not None: return r r = systemctl(cfg.get("disable-targets", []), "disable", ".target") if r is not None: return r r = systemctl(cfg.get("mask", []), "mask", "") if r is not None: return r return None calamares-3.2.41.1/src/modules/services-systemd/module.desc000066400000000000000000000002401410275732300235650ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "services-systemd" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/services-systemd/services-systemd.conf000066400000000000000000000044661410275732300256360ustar00rootroot00000000000000# 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). # # First, services are enabled; then targets; then services # are disabled -- this order of operations is fixed. --- # 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: # - *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. # - *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 # is not specified, the default is false. # # An entry may also be given as a single string, which is then # interpreted as the name of the service. In this case, mandatory # is also set to the default of false. # # Use [] to express an empty list. # # This example enables NetworkManager (and fails if it can't), # # disables cups (and ignores failure). Then it enables the # # graphical target (e.g. so that SDDM runs for login), and # # finally disables pacman-init (an ArchLinux-only service). # # # # Enables .service # services: # - name: "NetworkManager" # mandatory: true # - name: "cups" # mandatory: false # # # Enables .target # targets: # - name: "graphical" # mandatory: true # # # Disables .service # disable: # - name: "pacman-init" # mandatory: false # # # Disables .target # # .. this shows how to use just the name # disable-targets: # - graphical # # # Masks (stronger version of disable). This section # # is unusual because you **must** include the suffix # # (e.g. ".service") as part of the name, so, e.g. to mask # # NetworkManager (rather than just disable it) you must # # specify "NetworkManager.service" as name. # mask: # - name: "NetworkManager.service" # - mandatory: true # By default, no changes are made. services: [] targets: [] disable: [] disable-targets: [] mask: [] calamares-3.2.41.1/src/modules/shellprocess/000077500000000000000000000000001410275732300206415ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/shellprocess/CMakeLists.txt000066400000000000000000000006611410275732300234040ustar00rootroot00000000000000# === 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 SHARED_LIB ) calamares_add_test( shellprocesstest SOURCES Tests.cpp LIBRARIES yamlcpp::yamlcpp ) calamares-3.2.41.1/src/modules/shellprocess/ShellProcessJob.cpp000066400000000000000000000043761410275732300244200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ShellProcessJob.h" #include "CalamaresVersion.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include #include ShellProcessJob::ShellProcessJob( QObject* parent ) : Calamares::CppJob( parent ) , m_commands( nullptr ) { } ShellProcessJob::~ShellProcessJob() {} QString ShellProcessJob::prettyName() const { if ( m_name ) { return m_name->get(); } return tr( "Shell Processes Job" ); } Calamares::JobResult ShellProcessJob::exec() { if ( !m_commands || m_commands->isEmpty() ) { cWarning() << "No commands to execute" << moduleInstanceKey(); return Calamares::JobResult::ok(); } return m_commands->run(); } void ShellProcessJob::setConfigurationMap( const QVariantMap& configurationMap ) { bool dontChroot = CalamaresUtils::getBool( configurationMap, "dontChroot", false ); qint64 timeout = CalamaresUtils::getInteger( configurationMap, "timeout", 30 ); if ( timeout < 1 ) { timeout = 30; } if ( configurationMap.contains( "script" ) ) { m_commands = std::make_unique< CalamaresUtils::CommandList >( configurationMap.value( "script" ), !dontChroot, std::chrono::seconds( timeout ) ); if ( m_commands->isEmpty() ) { cDebug() << "ShellProcessJob: \"script\" contains no commands for" << moduleInstanceKey(); } } else { 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 >(); ) calamares-3.2.41.1/src/modules/shellprocess/ShellProcessJob.h000066400000000000000000000021361410275732300240550ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SHELLPROCESSJOB_H #define SHELLPROCESSJOB_H #include "CppJob.h" #include "DllMacro.h" #include "locale/TranslatableConfiguration.h" #include "utils/CommandList.h" #include "utils/PluginFactory.h" #include #include #include class PLUGINDLLEXPORT ShellProcessJob : public Calamares::CppJob { Q_OBJECT public: explicit ShellProcessJob( QObject* parent = nullptr ); ~ShellProcessJob() override; QString prettyName() const override; Calamares::JobResult exec() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: std::unique_ptr< CalamaresUtils::CommandList > m_commands; std::unique_ptr< CalamaresUtils::Locale::TranslatedString > m_name; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( ShellProcessJobFactory ) #endif // SHELLPROCESSJOB_H calamares-3.2.41.1/src/modules/shellprocess/Tests.cpp000066400000000000000000000131111410275732300224440ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "Tests.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CommandList.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include #include #include QTEST_GUILESS_MAIN( ShellProcessTests ) using CommandList = CalamaresUtils::CommandList; using std::operator""s; ShellProcessTests::ShellProcessTests() {} ShellProcessTests::~ShellProcessTests() {} void ShellProcessTests::initTestCase() { } void 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; } } CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 3 ); QCOMPARE( cl.at( 0 ).timeout(), CalamaresUtils::CommandLine::TimeoutNotSet() ); QCOMPARE( cl.at( 2 ).timeout(), 3600s ); // slowloris } void ShellProcessTests::testProcessListFromList() { YAML::Node doc = YAML::Load( R"(--- script: - "ls /tmp" - "ls /nonexistent" - "/bin/false" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 3 ); // Contains 1 bad element doc = YAML::Load( R"(--- script: - "ls /tmp" - false - "ls /nonexistent" )" ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl1.isEmpty() ); QCOMPARE( cl1.count(), 2 ); // One element ignored } void ShellProcessTests::testProcessListFromString() { YAML::Node doc = YAML::Load( R"(--- script: "ls /tmp" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.at( 0 ).timeout(), 10s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); // Not a string doc = YAML::Load( R"(--- script: false )" ); CommandList cl1( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( cl1.isEmpty() ); QCOMPARE( cl1.count(), 0 ); } void ShellProcessTests::testProcessFromObject() { YAML::Node doc = YAML::Load( R"(--- script: command: "ls /tmp" timeout: 20 )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 1 ); QCOMPARE( cl.at( 0 ).timeout(), 20s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); } void ShellProcessTests::testProcessListFromObject() { YAML::Node doc = YAML::Load( R"(--- script: - command: "ls /tmp" timeout: 12 - "-/bin/false" )" ); CommandList cl( CalamaresUtils::yamlMapToVariant( doc ).value( "script" ) ); QVERIFY( !cl.isEmpty() ); QCOMPARE( cl.count(), 2 ); QCOMPARE( cl.at( 0 ).timeout(), 12s ); QCOMPARE( cl.at( 0 ).command(), QStringLiteral( "ls /tmp" ) ); QCOMPARE( cl.at( 1 ).timeout(), CalamaresUtils::CommandLine::TimeoutNotSet() ); // not set } void ShellProcessTests::testRootSubstitution() { YAML::Node doc = YAML::Load( R"(--- script: - "ls /tmp" )" ); QVariant plainScript = CalamaresUtils::yamlMapToVariant( doc ).value( "script" ); QVariant rootScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- script: - "ls @@ROOT@@" )" ) ) .value( "script" ); QVariant userScript = CalamaresUtils::yamlMapToVariant( YAML::Load( R"(--- script: - mktemp -d @@ROOT@@/calatestXXXXXXXX - "chown @@USER@@ @@ROOT@@/calatest*" - rm -rf @@ROOT@@/calatest* )" ) ) .value( "script" ); if ( !Calamares::JobQueue::instance() ) (void)new Calamares::JobQueue( nullptr ); if ( !Calamares::Settings::instance() ) (void)Calamares::Settings::init( QString() ); Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QVERIFY( gs != nullptr ); qDebug() << "Expect WARNING, ERROR, WARNING"; // Doesn't use @@ROOT@@, so no failures QVERIFY( bool( CommandList( plainScript, false, 10s ).run() ) ); // Doesn't use @@ROOT@@, but does chroot, so fails QVERIFY( !bool( CommandList( plainScript, true, 10s ).run() ) ); // Does use @@ROOT@@, which is not set, so fails QVERIFY( !bool( CommandList( rootScript, false, 10s ).run() ) ); // .. fails for two reasons QVERIFY( !bool( CommandList( rootScript, true, 10s ).run() ) ); gs->insert( "rootMountPoint", "/tmp" ); // Now that the root is set, two variants work .. still can't // chroot, unless the rootMountPoint contains a full system, // *and* we're allowed to chroot (ie. running tests as root). qDebug() << "Expect no output."; QVERIFY( bool( CommandList( plainScript, false, 10s ).run() ) ); QVERIFY( bool( CommandList( rootScript, false, 10s ).run() ) ); qDebug() << "Expect ERROR"; // But no user set yet QVERIFY( !bool( CommandList( userScript, false, 10s ).run() ) ); // Now play dangerous games with shell expansion gs->insert( "username", "`id -u`" ); QVERIFY( bool( CommandList( userScript, false, 10s ).run() ) ); } calamares-3.2.41.1/src/modules/shellprocess/Tests.h000066400000000000000000000016751410275732300221250ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef TESTS_H #define TESTS_H #include class ShellProcessTests : public QObject { Q_OBJECT public: ShellProcessTests(); ~ShellProcessTests() override; private Q_SLOTS: void initTestCase(); // Check the sample config file is processed correctly void testProcessListSampleConfig(); // Create from a YAML list void testProcessListFromList(); // Create from a simple YAML string void testProcessListFromString(); // Create from a single complex YAML void testProcessFromObject(); // Create from a complex YAML list void testProcessListFromObject(); // Check @@ROOT@@ substitution void testRootSubstitution(); }; #endif calamares-3.2.41.1/src/modules/shellprocess/shellprocess.conf000066400000000000000000000071451410275732300242250ustar00rootroot00000000000000# 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*. # 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. In all of the commands, # the following substitutions will take place: # - `@@ROOT@@` is replaced by the root mount point of the **target** # system from the point of view of the command (for chrooted # commands, that will be */*). # - `@@USER@@` is replaced by the username, set on the user page. # # The (global) timeout for the command list can be set with # the *timeout* key. The value is a time in seconds, default # 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, # a failing command will abort the installation. This is much like # make's use of - in a command. # # The value of *script* may be: # - a single string; this is one command that is executed. # - 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). # 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 # 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 lit 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/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" calamares-3.2.41.1/src/modules/shellprocess/shellprocess.schema.yaml000066400000000000000000000036661410275732300255050ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/summary/000077500000000000000000000000001410275732300176305ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/summary/CMakeLists.txt000066400000000000000000000006571410275732300224000ustar00rootroot00000000000000# === 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 SummaryPage.cpp UI SHARED_LIB NO_CONFIG ) calamares-3.2.41.1/src/modules/summary/SummaryPage.cpp000066400000000000000000000144101410275732300225660ustar00rootroot00000000000000/* === 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-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "SummaryPage.h" #include "SummaryViewStep.h" #include "Branding.h" #include "Settings.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/QtCompat.h" #include "utils/Retranslator.h" #include "viewpages/ExecutionViewStep.h" #include #include #include static const int SECTION_SPACING = 12; SummaryPage::SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent ) : QWidget() , m_thisViewStep( thisViewStep ) , m_contentWidget( nullptr ) , m_scrollArea( new QScrollArea( this ) ) { Q_UNUSED( parent ) this->setObjectName( "summaryStep" ); Q_ASSERT( m_thisViewStep ); QVBoxLayout* layout = new QVBoxLayout( this ); layout->setContentsMargins( 0, 0, 0, 0 ); QLabel* headerLabel = new QLabel( this ); headerLabel->setObjectName( "summaryTitle" ); 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." ) ); ); layout->addWidget( headerLabel ); layout->addWidget( m_scrollArea ); m_scrollArea->setWidgetResizable( true ); m_scrollArea->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // If Calamares will grow, then only show scrollbar when it's needed // (e.g. when the screen is full). m_scrollArea->setVerticalScrollBarPolicy( Calamares::Branding::instance()->windowExpands() ? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOn ); m_scrollArea->setFrameStyle( QFrame::NoFrame ); m_scrollArea->setContentsMargins( 0, 0, 0, 0 ); } // 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->ensureSize( widgetSize ); // 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 { QLabel* label = new QLabel( text ); label->setObjectName( "summaryItemTitle" ); QFont fnt = font(); fnt.setWeight( QFont::Light ); fnt.setPointSize( CalamaresUtils::defaultFontSize() * 2 ); label->setFont( fnt ); label->setContentsMargins( 0, 0, 0, 0 ); return label; } QLabel* SummaryPage::createBodyLabel( const QString& text ) const { QLabel* label = new QLabel; label->setObjectName( "summaryItemBody" ); label->setMargin( CalamaresUtils::defaultFontHeight() / 2 ); QPalette pal( palette() ); pal.setColor( WindowBackground, palette().window().color().lighter( 108 ) ); label->setAutoFillBackground( true ); label->setPalette( pal ); label->setText( text ); return label; } calamares-3.2.41.1/src/modules/summary/SummaryPage.h000066400000000000000000000035601410275732300222370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SUMMARYPAGE_H #define SUMMARYPAGE_H #include "viewpages/ViewStep.h" #include class QLabel; class QScrollArea; class QVBoxLayout; class SummaryViewStep; /** @brief Provide a summary view with to-be-done action descriptions. * * Those steps that occur since the previous execution step (e.g. that * are queued for execution now; in the normal case where there is * only one execution step, this means everything that the installer * is going to do) are added to the summary view. Each view step * can provide one of the following things to display in the summary * view: * * - A string from ViewStep::prettyStatus(), which is formatted * and added as a QLabel to the view. Return an empty string * from prettyStatus() to avoid this. * - A QWidget from ViewStep::createSummaryWidget(). This is for * complicated displays not suitable for simple text representation. * Return a nullptr to avoid this. * * If neither a (non-empty) string nor a widget is returned, the * step is not named in the summary. */ class SummaryPage : public QWidget { Q_OBJECT public: explicit SummaryPage( const SummaryViewStep* thisViewStep, QWidget* parent = nullptr ); void onActivate(); void createContentWidget(); 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; }; #endif // SUMMARYPAGE_H calamares-3.2.41.1/src/modules/summary/SummaryViewStep.cpp000066400000000000000000000025441410275732300234650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "SummaryViewStep.h" #include "SummaryPage.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( SummaryViewStepFactory, registerPlugin< SummaryViewStep >(); ) SummaryViewStep::SummaryViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( new SummaryPage( this ) ) { emit nextStatusChanged( true ); } SummaryViewStep::~SummaryViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString SummaryViewStep::prettyName() const { return tr( "Summary" ); } QWidget* SummaryViewStep::widget() { return m_widget; } bool SummaryViewStep::isNextEnabled() const { return true; } bool SummaryViewStep::isBackEnabled() const { return true; } bool SummaryViewStep::isAtBeginning() const { return true; } bool SummaryViewStep::isAtEnd() const { return true; } QList< Calamares::job_ptr > SummaryViewStep::jobs() const { return QList< Calamares::job_ptr >(); } void SummaryViewStep::onActivate() { m_widget->onActivate(); } void SummaryViewStep::onLeave() { m_widget->createContentWidget(); } calamares-3.2.41.1/src/modules/summary/SummaryViewStep.h000066400000000000000000000021371410275732300231300ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SUMMARYPAGEPLUGIN_H #define SUMMARYPAGEPLUGIN_H #include #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include "DllMacro.h" class SummaryPage; class PLUGINDLLEXPORT SummaryViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit SummaryViewStep( QObject* parent = nullptr ); ~SummaryViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void onActivate() override; void onLeave() override; private: SummaryPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( SummaryViewStepFactory ) #endif // SUMMARYPAGEPLUGIN_H calamares-3.2.41.1/src/modules/tracking/000077500000000000000000000000001410275732300177355ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/tracking/CMakeLists.txt000066400000000000000000000010621410275732300224740ustar00rootroot00000000000000# === 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 UI page_trackingstep.ui RESOURCES page_trackingstep.qrc SHARED_LIB ) calamares_add_test( trackingtest SOURCES Tests.cpp Config.cpp ) calamares-3.2.41.1/src/modules/tracking/Config.cpp000066400000000000000000000155071410275732300216560ustar00rootroot00000000000000/* === 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 ); } calamares-3.2.41.1/src/modules/tracking/Config.h000066400000000000000000000141251410275732300213160ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/tracking/Tests.cpp000066400000000000000000000021451410275732300215450ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/modules/tracking/TrackingJobs.cpp000066400000000000000000000153221410275732300230240ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #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 TrackingInstallJob::TrackingInstallJob( const QString& url ) : m_url( url ) { } TrackingInstallJob::~TrackingInstallJob() {} QString TrackingInstallJob::prettyName() const { return tr( "Installation feedback" ); } QString TrackingInstallJob::prettyStatusMessage() const { return tr( "Sending installation feedback." ); } Calamares::JobResult TrackingInstallJob::exec() { using CalamaresUtils::Network::Manager; using CalamaresUtils::Network::RequestOptions; using CalamaresUtils::Network::RequestStatus; auto result = Manager::instance().synchronousPing( QUrl( m_url ), RequestOptions( RequestOptions::FollowRedirect | RequestOptions::FakeUserAgent, RequestOptions::milliseconds( 5000 ) ) ); 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::ok(); } TrackingMachineUpdateManagerJob::~TrackingMachineUpdateManagerJob() {} QString TrackingMachineUpdateManagerJob::prettyName() const { return tr( "Machine feedback" ); } QString TrackingMachineUpdateManagerJob::prettyStatusMessage() const { return tr( "Configuring machine feedback." ); } Calamares::JobResult TrackingMachineUpdateManagerJob::exec() { static const auto script = QStringLiteral( "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, // standard input std::chrono::seconds( 1 ) ); int r = res.first; if ( r == 0 ) { return Calamares::JobResult::ok(); } 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 ) ); } else { return Calamares::JobResult::error( tr( "Error in machine feedback configuration." ), tr( "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 tr( "KDE user feedback" ); } QString TrackingKUserFeedbackJob::prettyStatusMessage() const { return tr( "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( tr( "Error in KDE user feedback configuration." ), tr( "Could not configure KDE user feedback correctly, script error %1." ).arg( r ) ); } else if ( r < 0 ) { return Calamares::JobResult::error( tr( "Error in KDE user feedback configuration." ), tr( "Could not configure KDE user feedback correctly, Calamares error %1." ).arg( r ) ); } } return Calamares::JobResult::ok(); } 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; } } } calamares-3.2.41.1/src/modules/tracking/TrackingJobs.h000066400000000000000000000055121410275732300224710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef TRACKING_TRACKINGJOBS_H #define TRACKING_TRACKINGJOBS_H #include "Job.h" class InstallTrackingConfig; class MachineTrackingConfig; class UserTrackingConfig; class QSemaphore; /** @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 * a class with static method `addJob()` that takes the configuration * information from the relevant Config sub-object and optionally * adds the right job (subclass!) to the list of jobs. */ /** @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 { Q_OBJECT 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 { Q_OBJECT 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; }; void addJob( Calamares::JobList& list, InstallTrackingConfig* config ); void addJob( Calamares::JobList& list, MachineTrackingConfig* config ); void addJob( Calamares::JobList& list, UserTrackingConfig* config ); #endif calamares-3.2.41.1/src/modules/tracking/TrackingPage.cpp000066400000000000000000000114051410275732300230010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2017-2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "TrackingPage.h" #include "Config.h" #include "ui_page_trackingstep.h" #include "Branding.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "ViewManager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include #include TrackingPage::TrackingPage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::TrackingPage ) { ui->setupUi( this ); CALAMARES_RETRANSLATE_SLOT( &TrackingPage::retranslate ); 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::retranslate() { 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::anyOtherChecked() const { return ui->installCheckBox->isChecked() || ui->machineCheckBox->isChecked() || ui->userCheckBox->isChecked(); } void TrackingPage::buttonNoneChecked( int state ) { if ( state ) { 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 ); } } void TrackingPage::buttonChecked( int state ) { if ( state ) { // Can't have none checked, if another one is ui->noneCheckBox->setEnabled( true ); ui->noneCheckBox->setChecked( false ); } else { if ( !anyOtherChecked() ) { ui->noneCheckBox->setChecked( true ); ui->noneCheckBox->setEnabled( false ); } } } void TrackingPage::trackerChanged( TrackingStyleConfig* config, QWidget* panel, QCheckBox* check ) { panel->setVisible( config->isConfigurable() ); check->setChecked( config->isEnabled() ); } calamares-3.2.41.1/src/modules/tracking/TrackingPage.h000066400000000000000000000032121410275732300224430ustar00rootroot00000000000000/* === 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. * */ #ifndef TRACKINGPAGE_H #define TRACKINGPAGE_H #include "TrackingType.h" #include #include #include namespace Ui { class TrackingPage; } class Config; class TrackingStyleConfig; class TrackingPage : public QWidget { Q_OBJECT public: explicit TrackingPage( Config* config, QWidget* parent = nullptr ); /** @brief is any of the enable-tracking buttons checked? * * Returns true if any one or more of install, machine or user * tracking is enabled. */ bool anyOtherChecked() const; 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; }; #endif //TRACKINGPAGE_H calamares-3.2.41.1/src/modules/tracking/TrackingType.h000066400000000000000000000012621410275732300225130ustar00rootroot00000000000000/* === 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. * */ #ifndef TRACKINGTYPE_H #define TRACKINGTYPE_H #include "utils/NamedEnum.h" enum class TrackingType { 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 calamares-3.2.41.1/src/modules/tracking/TrackingViewStep.cpp000066400000000000000000000042731410275732300237000ustar00rootroot00000000000000/* === 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 "TrackingViewStep.h" #include "Config.h" #include "TrackingJobs.h" #include "TrackingPage.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Variant.h" #include #include CALAMARES_PLUGIN_FACTORY_DEFINITION( TrackingViewStepFactory, registerPlugin< TrackingViewStep >(); ) TrackingViewStep::TrackingViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_config( new Config( this ) ) , m_widget( new TrackingPage( m_config ) ) { emit nextStatusChanged( false ); } TrackingViewStep::~TrackingViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString TrackingViewStep::prettyName() const { return tr( "Feedback" ); } QWidget* TrackingViewStep::widget() { return m_widget; } bool TrackingViewStep::isNextEnabled() const { return true; } bool TrackingViewStep::isBackEnabled() const { return true; } bool TrackingViewStep::isAtBeginning() const { return true; } bool TrackingViewStep::isAtEnd() const { return true; } void TrackingViewStep::onLeave() { 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 { cDebug() << "Creating tracking jobs .."; 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; } void TrackingViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/tracking/TrackingViewStep.h000066400000000000000000000023561410275732300233450ustar00rootroot00000000000000/* === 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. * */ #ifndef TRACKINGVIEWSTEP_H #define TRACKINGVIEWSTEP_H #include "TrackingType.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include #include class Config; class TrackingPage; class PLUGINDLLEXPORT TrackingViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit TrackingViewStep( QObject* parent = nullptr ); ~TrackingViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; void onLeave() override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: Config* m_config; TrackingPage* m_widget; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( TrackingViewStepFactory ) #endif // TRACKINGVIEWSTEP_H calamares-3.2.41.1/src/modules/tracking/level-install.svg000066400000000000000000000162151410275732300232360ustar00rootroot00000000000000 image/svg+xml ! calamares-3.2.41.1/src/modules/tracking/level-install.svg.license000066400000000000000000000001701410275732300246500ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/tracking/level-machine.svg000066400000000000000000000277161410275732300232040ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/src/modules/tracking/level-machine.svg.license000066400000000000000000000001701410275732300246060ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/tracking/level-none.svg000066400000000000000000000166741410275732300225400ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/src/modules/tracking/level-none.svg.license000066400000000000000000000001701410275732300241410ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/tracking/level-user.svg000066400000000000000000000213111410275732300225370ustar00rootroot00000000000000 image/svg+xml calamares-3.2.41.1/src/modules/tracking/level-user.svg.license000066400000000000000000000001701410275732300241600ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Uri Herrera and others SPDX-License-Identifier: LGPL-3.0-or-later calamares-3.2.41.1/src/modules/tracking/page_trackingstep.qrc000066400000000000000000000003711410275732300241370ustar00rootroot00000000000000 level-none.svg level-install.svg level-machine.svg level-user.svg ../../../data/images/information.svgz calamares-3.2.41.1/src/modules/tracking/page_trackingstep.ui000066400000000000000000000221601410275732300237670ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org> SPDX-License-Identifier: GPL-3.0-or-later TrackingPage 0 0 799 400 Form margin-bottom: 1ex; margin-left: 2em; Placeholder true 64 64 64 64 :/tracking/level-none.svg 0 0 <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 64 64 64 64 :/tracking/level-install.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz 64 64 64 64 :/tracking/level-machine.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz 64 64 64 64 :/tracking/level-user.svg 0 0 TextLabel true ... :/tracking/data/images/information.svgz:/tracking/data/images/information.svgz <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> Qt::RichText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false Qt::TextBrowserInteraction Qt::Vertical 20 40 calamares-3.2.41.1/src/modules/tracking/tracking.conf000066400000000000000000000113541410275732300224120ustar00rootroot00000000000000# 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, # and are advised to consult the Mozilla and KDE policies on # privacy and user tracking. # # There are three areas of tracking (-configuration) supported # by Calamares It is up to individual Distributions to create # suitable backends / configuration scripts for each. The # different areas are: # # install: This is "phone home" functionality at the end of the # install process. When enabled, it contacts the given # URL. The URL can contain the special token $MACHINE, # which is replaced by the machine-id of the installed # system (if available, blank otherwise). # # machine: This enables machine-level tracking on a (semi-) # continuous basis. It is meant to keep track of installed # systems and their continued use / updating. # # user: This area enables user-level tracking, along the lines # of the KDE User Telemetry Policy. It enables specific # collection of data at a user- and application-level, # possibly including actions done in an application. # For the KDE environment, this enables user tracking # with the appropriate framework, and the KDE User Telemetry # policy applies. # # Each area has a key *enabled*. If the area is enabled, it is shown to # 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, 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. # # Globally, there are two other keys: # # policy: (optional) url about tracking settings for this distro. # default: (optional) level to enable by default # --- # 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. You **must** provide policy links per-area as well. policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" # This is the default area to enable for tracking. If commented out, # empty, or otherwise invalid, "none" is used, so no tracking by default. # 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) # is fetched (with a GET request, and the data discarded) at # the end of the installation process. The following tokens # are replaced in the url (possibly by blank strings, or by 0). # - $CPU (cpu make and model) # - $MEMORY (amount of main memory available) # - $DISK (total amount of disk attached) # Typically these are used as GET parameters, as in the example. # # Note that phone-home only works if the system has an internet # connection; it is a good idea to require internet in the welcome # module then. install: enabled: false policy: "https://github.com/calamares/calamares/wiki/Use-Guide#installation-tracking" 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. 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: updatemanager policy: "https://github.com/calamares/calamares/wiki/Use-Guide#machine-tracking" # 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 ] calamares-3.2.41.1/src/modules/umount/000077500000000000000000000000001410275732300174625ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/umount/main.py000066400000000000000000000063671410275732300207740ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # SPDX-FileCopyrightText: 2014 Aurélien Gâteau # SPDX-FileCopyrightText: 2016 Anke Boersma # SPDX-FileCopyrightText: 2018 Adriaan de Groot # SPDX-License-Identifier: GPL-3.0-or-later # # Calamares is Free Software: see the License-Identifier above. # 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 = [] root_mount_point = os.path.normpath(root_mount_point) for line in open("/etc/mtab").readlines(): device, mount_point, _ = line.split(" ", 2) if os.path.commonprefix([root_mount_point, mount_point]) == 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: # On success, no output; if the command fails, its output is # in the exception object. subprocess.check_output(["umount", "-lv", mount_point], stderr=subprocess.STDOUT) os.rmdir(root_mount_point) return None calamares-3.2.41.1/src/modules/umount/module.desc000066400000000000000000000002261410275732300216070ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- type: "job" name: "umount" interface: "python" script: "main.py" calamares-3.2.41.1/src/modules/umount/umount.conf000066400000000000000000000015241410275732300216620ustar00rootroot00000000000000# 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. # # The "copy log files" functionality is deprecated; use the *preservefiles* # module instead, which is more flexible. # # 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 # --- # 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" calamares-3.2.41.1/src/modules/umount/umount.schema.yaml000066400000000000000000000004621410275732300231360ustar00rootroot00000000000000# 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: srcLog: { type: string } destLog: { type: string } calamares-3.2.41.1/src/modules/unpackfs/000077500000000000000000000000001410275732300177455ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/unpackfs/main.py000066400000000000000000000424761410275732300212600ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # === This file is part of Calamares - === # # 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: see the License-Identifier above. # import os import re import shutil import subprocess import sys import tempfile from libcalamares import * from libcalamares.utils import mount import gettext _ = gettext.translation("calamares-python", localedir=utils.gettext_path(), languages=utils.gettext_languages(), fallback=True).gettext def pretty_name(): return _("Filling up filesystems.") # This is going to be changed from various methods status = pretty_name() def pretty_status_message(): return status class UnpackEntry: """ Extraction routine using rsync. :param source: :param sourcefs: :param destination: """ __slots__ = ('source', 'sourcefs', 'destination', 'copied', 'total', 'exclude', 'excludeFile', 'mountPoint', 'weight') def __init__(self, source, sourcefs, destination): """ @p source is the source file name (might be an image file, or a directory, too) @p sourcefs is a type indication; "file" is special, as is "squashfs". @p destination is where the files from the source go. This is **already** prefixed by rootMountPoint, so should be a valid absolute path within the host system. The members copied and total are filled in by the copying process. """ self.source = source self.sourcefs = sourcefs self.destination = destination self.exclude = None self.excludeFile = None self.copied = 0 self.total = 0 self.mountPoint = None self.weight = 1 def is_file(self): return self.sourcefs == "file" def do_count(self): """ Counts the number of files this entry has. """ fslist = "" if self.sourcefs == "squashfs": fslist = subprocess.check_output( ["unsquashfs", "-l", self.source] ) elif self.sourcefs == "ext4": fslist = subprocess.check_output( ["find", self.mountPoint, "-type", "f"] ) 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"]) self.total = len(fslist.splitlines()) return self.total def do_mount(self, base): """ Mount given @p entry as loop device underneath @p base A *file* entry (e.g. one with *sourcefs* set to *file*) is not mounted and just ignored. :param base: directory to place all the mounts in. :returns: None, but throws if the mount failed """ imgbasename = os.path.splitext( os.path.basename(self.source))[0] imgmountdir = os.path.join(base, imgbasename) os.makedirs(imgmountdir, exist_ok=True) # This is where it *would* go (files bail out before actually mounting) self.mountPoint = imgmountdir if self.is_file(): return if os.path.isdir(self.source): r = mount(self.source, imgmountdir, "", "--bind") elif os.path.isfile(self.source): r = mount(self.source, imgmountdir, self.sourcefs, "loop") else: # self.source is a device r = mount(self.source, imgmountdir, self.sourcefs, "") if r != 0: utils.debug("Failed to mount '{}' (fs={}) (target={})".format(self.source, self.sourcefs, imgmountdir)) raise subprocess.CalledProcessError(r, "mount") ON_POSIX = 'posix' in sys.builtin_module_names def global_excludes(): """ List excludes for rsync. """ lst = [] extra_mounts = globalstorage.value("extraMounts") if extra_mounts is None: extra_mounts = [] for extra_mount in extra_mounts: mount_point = extra_mount["mountPoint"] if mount_point: lst.extend(['--exclude', mount_point + '/']) return lst def file_copy(source, entry, progress_cb): """ Extract given image using rsync. :param source: Source file. This may be the place the entry's image is mounted, or if it's a single file, the entry's source value. :param entry: The UnpackEntry being copied. :param progress_cb: A callback function for progress reporting. Takes a number and a total-number. """ import time dest = entry.destination # 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" # `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 # "/dest", then files will be copied in "/dest/bar". if not source.endswith("/") and not os.path.isfile(source): source += "/" num_files_total_local = 0 num_files_copied = 0 # Gets updated through rsync output args = ['rsync', '-aHAXr', '--filter=-x trusted.overlay.*'] args.extend(global_excludes()) if entry.excludeFile: args.extend(["--exclude-from=" + entry.excludeFile]) if entry.exclude: 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 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. # last_num_files_copied = 0 last_timestamp_reported = time.time() file_count_chunk = 107 for line in iter(process.stdout.readline, b''): # rsync outputs progress in parentheses. Each line will have an # xfer and a chk item (either ir-chk or to-chk) as follows: # # - xfer#x => Interpret it as 'file copy try no. x' # - ir-chk=x/y, where: # - x = number of files yet to be checked # - y = currently calculated total number of files. # - to-chk=x/y, which is similar and happens once the ir-chk # phase (collecting total files) is over. # # 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()) if m: # we've got a percentage update num_files_remaining = int(m[0][1]) num_files_total_local = int(m[0][2]) # adjusting the offset so that progressbar can be continuesly drawn num_files_copied = num_files_total_local - num_files_remaining now = time.time() if (num_files_copied - last_num_files_copied >= file_count_chunk) or (now - last_timestamp_reported > 0.5): last_num_files_copied = num_files_copied last_timestamp_reported = now progress_cb(num_files_copied, num_files_total_local) process.wait() progress_cb(num_files_copied, num_files_total_local) # Push towards 100% # Mark this entry as really done entry.copied = entry.total # 23 is the return code rsync returns if it cannot write extended # attributes (with -X) because the target file system does not support it, # e.g., the FAT EFI system partition. We need -X because distributions # using file system capabilities and/or SELinux require the extended # attributes. But distributions using SELinux may also have SELinux labels # set on files under /boot/efi, and rsync complains about those. The only # clean way would be to split the rsync into one with -X and # --exclude /boot/efi and a separate one without -X for /boot/efi, but only # if /boot/efi is actually an EFI system partition. For now, this hack will # 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) return None class UnpackOperation: """ Extraction routine using unsquashfs. :param entries: """ 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): """ Pass progress to user interface """ progress = float(0) 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_weight += entry.weight complete_count += 1 else: # There is at most *one* entry in-progress current_total = entry.total current_done = entry.copied complete_weight += entry.weight * ( 1.0 * current_done ) / current_total break if current_total > 0: progress = ( 1.0 * complete_weight ) / self.total_weight global status status = _("Unpacking image {}/{}, file {}/{}").format((complete_count+1), len(self.entries), current_done, current_total) job.setprogress(progress) def run(self): """ Extract given image using unsquashfs. :return: """ global status source_mount_path = tempfile.mkdtemp() try: complete = 0 for entry in self.entries: status = _("Starting to unpack {}").format(entry.source) job.setprogress( ( 1.0 * complete ) / len(self.entries) ) entry.do_mount(source_mount_path) entry.do_count() # Fill in the entry.total self.report_progress() error_msg = self.unpack_image(entry, entry.mountPoint) if error_msg: return (_("Failed to unpack image \"{}\"").format(entry.source), error_msg) complete += 1 return None finally: shutil.rmtree(source_mount_path, ignore_errors=True, onerror=None) def unpack_image(self, entry, imgmountdir): """ Unpacks image. :param entry: :param imgmountdir: :return: """ def progress_cb(copied, total): """ Copies file to given destination target. :param copied: """ entry.copied = copied if total > entry.total: entry.total = total self.report_progress() try: if entry.is_file(): source = entry.source else: source = imgmountdir return file_copy(source, entry, progress_cb) finally: if not entry.is_file(): subprocess.check_call(["umount", "-l", imgmountdir]) def get_supported_filesystems_kernel(): """ Reads /proc/filesystems (the list of supported filesystems for the current kernel) and returns a list of (names of) those filesystems. """ PATH_PROCFS = '/proc/filesystems' if os.path.isfile(PATH_PROCFS) and os.access(PATH_PROCFS, os.R_OK): with open(PATH_PROCFS, 'r') as procfile: filesystems = procfile.read() filesystems = filesystems.replace( "nodev", "").replace("\t", "").splitlines() return filesystems return [] def get_supported_filesystems(): """ Returns a list of all the supported filesystems (valid values for the *sourcefs* key in an item. """ 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: 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: utils.warning("*weight* setting {!r} is not valid.".format(w)) except TypeError: utils.warning("*weight* setting {!r} must be number.".format(w)) return 1 def run(): """ Unsquash filesystem. """ root_mount_point = globalstorage.value("rootMountPoint") if not root_mount_point: utils.warning("No mount point for root partition") return (_("No mount point for root partition"), _("globalstorage does not contain a \"rootMountPoint\" key, " "doing nothing")) if not os.path.exists(root_mount_point): 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)) supported_filesystems = get_supported_filesystems() # Bail out before we start when there are obvious problems # - unsupported filesystems # - non-existent sources # - missing tools for specific FS for entry in 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"), _("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"), _("The source filesystem \"{}\" does not exist").format(source)) if sourcefs == "squashfs": if shutil.which("unsquashfs") is None: 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")) unpack = list() is_first = True for entry in 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)) if is_first: return (_("Bad unsquash 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.") unpack.append(UnpackEntry(source, sourcefs, destination)) # Optional settings if entry.get("exclude", None): unpack[-1].exclude = entry["exclude"] if entry.get("excludeFile", None): unpack[-1].excludeFile = entry["excludeFile"] unpack[-1].weight = extract_weight(entry) is_first = False repair_root_permissions(root_mount_point) try: unpackop = UnpackOperation(unpack) return unpackop.run() finally: repair_root_permissions(root_mount_point) calamares-3.2.41.1/src/modules/unpackfs/module.desc000066400000000000000000000003271410275732300220740ustar00rootroot00000000000000# 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 ] weight: 12 calamares-3.2.41.1/src/modules/unpackfs/runtests.sh000066400000000000000000000017101410275732300221670ustar00rootroot00000000000000#! /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 mkdir /tmp/unpackfs-test-run-rootdir3 # For test 7 mkdir /tmp/unpackfs-test-run-rootdir3/realdest # For test 9 mkdir /tmp/unpackfs-test-run-rootdir3/smalldest if test 0 = $( id -u ) ; then mount -t tmpfs -o size=32M tmpfs /tmp/unpackfs-test-run-rootdir3/smalldest dd if=/dev/zero of=/tmp/unpackfs-test-run-rootdir3/smalldest/bogus.zero bs=1M count=1 fi # Run tests sh "$SRCDIR/../testpythonrun.sh" unpackfs # Cleanup test 9 if test 0 = $( id -u ) ; then umount /tmp/unpackfs-test-run-rootdir3/smalldest fi # Cleanup test 7 rm -rf /tmp/unpackfs-test-run-rootdir3/realdest # Cleanup test 3 rmdir /tmp/unpackfs-test-run-rootdir3 calamares-3.2.41.1/src/modules/unpackfs/tests/000077500000000000000000000000001410275732300211075ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/unpackfs/tests/1.global000066400000000000000000000001201410275732300224220ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- bogus: true calamares-3.2.41.1/src/modules/unpackfs/tests/2.global000066400000000000000000000001641410275732300224330ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ calamares-3.2.41.1/src/modules/unpackfs/tests/3.global000066400000000000000000000001651410275732300224350ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.41.1/src/modules/unpackfs/tests/3.job000066400000000000000000000001171410275732300217440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: [] calamares-3.2.41.1/src/modules/unpackfs/tests/4.global000066400000000000000000000001651410275732300224360ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.41.1/src/modules/unpackfs/tests/4.job000066400000000000000000000001601410275732300217430ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: bogus calamares-3.2.41.1/src/modules/unpackfs/tests/5.global000066400000000000000000000001651410275732300224370ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.41.1/src/modules/unpackfs/tests/5.job000066400000000000000000000002251410275732300217460ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: ./fakesource sourcefs: ext4 destination: fakedest calamares-3.2.41.1/src/modules/unpackfs/tests/6.global000066400000000000000000000001651410275732300224400ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.41.1/src/modules/unpackfs/tests/6.job000066400000000000000000000002121410275732300217430ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: fakedest calamares-3.2.41.1/src/modules/unpackfs/tests/7.global000066400000000000000000000001651410275732300224410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir3/ calamares-3.2.41.1/src/modules/unpackfs/tests/7.job000066400000000000000000000002121410275732300217440ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: realdest calamares-3.2.41.1/src/modules/unpackfs/tests/8.global000066400000000000000000000002161410275732300224370ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- rootMountPoint: /tmp/unpackfs-test-run-rootdir/ localeConf: - LANG: nl calamares-3.2.41.1/src/modules/unpackfs/tests/8.job000066400000000000000000000002121410275732300217450ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 --- unpack: - source: . sourcefs: ext4 destination: realdest calamares-3.2.41.1/src/modules/unpackfs/tests/9.global000066400000000000000000000002611410275732300224400ustar00rootroot00000000000000# 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/ calamares-3.2.41.1/src/modules/unpackfs/tests/9.job000066400000000000000000000003071410275732300217530ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # This test uses a small destination FS, to make rsync fail --- unpack: - source: . sourcefs: ext4 destination: smalldest calamares-3.2.41.1/src/modules/unpackfs/unpackfs.conf000066400000000000000000000076761410275732300224460ustar00rootroot00000000000000# 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. # # Configuration: # # from globalstorage: rootMountPoint # from job.configuration: the path to where to mount the source image(s) # for copying an ordered list of unpack mappings for image file <-> # target dir relative to rootMountPoint. --- # Each list item is unpacked, in order, to the target system. # # Each list item has the following **mandatory** attributes: # - *source* path relative to the live / intstalling system to the image # - *sourcefs* the type of the source files; valid entries are # - `ext4` (copies the filesystem contents) # - `squashfs` (unsquashes) # - `file` (copies a file or directory) # - (may be others if mount supports it) # - *destination* path relative to rootMountPoint (so in the target # system) where this filesystem is unpacked. It may be an # empty string, which effectively is / (the root) of the target # system. # # Each list item **optionally** can include the following attributes: # - *exclude* is a list of values that is expanded into --exclude # arguments for rsync (each entry in exclude gets its own --exclude). # - *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 # # Usually you list a filesystem image to unpack; you can use # squashfs or an ext4 image. An empty destination is equivalent to "/", # the root of the target system. The destination directory must exist # in the target system. # # - source: "/path/to/filesystem.sqfs" # sourcefs: "squashfs" # destination: "" # # Multiple entries are unpacked in-order; if there is more than one # item then only the first must exist beforehand -- it's ok to # create directories with one unsquash and then to use those # directories as a target from a second unsquash. # # - source: "/path/to/another/filesystem.img" # sourcefs: "ext4" # destination: "" # - source: "/path/to/another/filesystem2.img" # sourcefs: "ext4" # destination: "/usr/lib/extra" # # You can list filesystem source paths relative to the Calamares run # directory, if you use -d (this is only useful for testing, though). # # - source: ./example.sqfs # sourcefs: squashfs # destination: "" # # You can list individual files (copied one-by-one), or directories # (the files inside this directory are copied directly to the destination, # so no "dummycpp/" subdirectory is created in this example). # Do note that the target directory must exist already (e.g. from # extracting some other filesystem). # # - source: ../CHANGES # sourcefs: file # destination: "/tmp/derp" # - source: ../src/modules/dummycpp # sourcefs: file # destination: "/tmp/derp" # # The *destination* and *source* are handed off to rsync, so the semantics # of trailing slashes apply. In order to *rename* a file as it is # copied, specify one single file (e.g. CHANGES) and a full pathname # for its destination name, as in the example below. 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 calamares-3.2.41.1/src/modules/unpackfs/unpackfs.schema.yaml000066400000000000000000000013531410275732300237040ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/users/000077500000000000000000000000001410275732300172745ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/users/CMakeLists.txt000066400000000000000000000052351410275732300220410ustar00rootroot00000000000000# === 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 ) # Add optional libraries here set( USER_EXTRA_LIB ) 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() 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 UsersViewStep.cpp UsersPage.cpp UI page_usersetup.ui RESOURCES users.qrc LINK_PRIVATE_LIBRARIES users_internal ${CRYPT_LIBRARIES} ${USER_EXTRA_LIB} SHARED_LIB ) calamares_add_test( userspasswordtest SOURCES 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 ${_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-3.2.41.1/src/modules/users/CheckPWQuality.cpp000066400000000000000000000365771410275732300226570ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * 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 Free Software: see the License-Identifier above. * */ #include "CheckPWQuality.h" #include "utils/Logger.h" #include #include #ifdef HAVE_LIBPWQUALITY #include #endif #include PasswordCheck::PasswordCheck() : m_weight( 0 ) , m_message() , m_accept( []( const QString& ) { return true; } ) { } PasswordCheck::PasswordCheck( MessageFunc m, AcceptFunc a, Weight weight ) : m_weight( weight ) , m_message( m ) , m_accept( a ) { } DEFINE_CHECK_FUNC( minLength ) { int minLength = -1; if ( value.canConvert( QVariant::Int ) ) { minLength = value.toInt(); } if ( minLength > 0 ) { 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; }, PasswordCheck::Weight( 10 ) ) ); } } DEFINE_CHECK_FUNC( maxLength ) { int maxLength = -1; if ( value.canConvert( QVariant::Int ) ) { maxLength = value.toInt(); } if ( maxLength > 0 ) { 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; }, PasswordCheck::Weight( 10 ) ) ); } } #ifdef HAVE_LIBPWQUALITY /* NOTE: * * The munge*() functions are here because libpwquality uses void* to * represent user-data in callbacks and as a general "pass some parameter" * type. These need to be munged to the right C++ type. */ /// @brief Handle libpwquality using void* to represent a long static inline long mungeLong( void* p ) { return static_cast< long >( reinterpret_cast< intptr_t >( p ) ); } /// @brief Handle libpwquality using void* to represent a char* static inline const char* mungeString( void* p ) { return reinterpret_cast< const char* >( p ); } /** * Class that acts as a RAII placeholder for pwquality_settings_t pointers. * Gets a new pointer and ensures it is deleted only once; provides * convenience functions for setting options and checking passwords. */ class PWSettingsHolder { public: static constexpr int arbitrary_minimum_strength = 40; PWSettingsHolder() : m_settings( pwquality_default_settings() ) { } ~PWSettingsHolder() { pwquality_free_settings( m_settings ); } /// Sets an option via the configuration string @p v, = style. int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); } /** @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; 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; } /** @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() { if ( m_rv >= arbitrary_minimum_strength ) { return QString(); } if ( m_rv >= 0 ) { return QCoreApplication::translate( "PWQ", "Password is too weak" ); } switch ( m_rv ) { case PWQ_ERROR_MEM_ALLOC: if ( !m_errorString.isEmpty() ) { 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: return QCoreApplication::translate( "PWQ", "The password is the same as the old one" ); case PWQ_ERROR_PALINDROME: return QCoreApplication::translate( "PWQ", "The password is a palindrome" ); case PWQ_ERROR_CASE_CHANGES_ONLY: return QCoreApplication::translate( "PWQ", "The password differs with case changes only" ); case PWQ_ERROR_TOO_SIMILAR: return QCoreApplication::translate( "PWQ", "The password is too similar to the old one" ); case PWQ_ERROR_USER_CHECK: return QCoreApplication::translate( "PWQ", "The password contains the user name in some form" ); case PWQ_ERROR_GECOS_CHECK: return QCoreApplication::translate( "PWQ", "The password contains words from the real name of the user in some form" ); case PWQ_ERROR_BAD_WORDS: return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" ); case PWQ_ERROR_MIN_DIGITS: if ( m_errorCount ) { 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 ( m_errorCount ) { 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 ( m_errorCount ) { 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 ( m_errorCount ) { 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 ( m_errorCount ) { 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 a rotated version of the previous one" ); case PWQ_ERROR_MIN_CLASSES: if ( m_errorCount ) { 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 ( m_errorCount ) { 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 ( m_errorCount ) { return QCoreApplication::translate( "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 ( m_errorCount ) { return QCoreApplication::translate( "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" ); case PWQ_ERROR_EMPTY_PASSWORD: return QCoreApplication::translate( "PWQ", "No password supplied" ); case PWQ_ERROR_RNG: return QCoreApplication::translate( "PWQ", "Cannot obtain random numbers from the RNG device" ); case PWQ_ERROR_GENERATION_FAILED: return QCoreApplication::translate( "PWQ", "Password generation failed - required entropy too low for settings" ); case PWQ_ERROR_CRACKLIB_CHECK: if ( !m_errorString.isEmpty() ) { return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" ) .arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" ); case PWQ_ERROR_UNKNOWN_SETTING: if ( !m_errorString.isEmpty() ) { return QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Unknown setting" ); case PWQ_ERROR_INTEGER: if ( !m_errorString.isEmpty() ) { 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 ( !m_errorString.isEmpty() ) { 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 ( !m_errorString.isEmpty() ) { 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: return QCoreApplication::translate( "PWQ", "Opening the configuration file failed" ); case PWQ_ERROR_CFGFILE_MALFORMED: return QCoreApplication::translate( "PWQ", "The configuration file is malformed" ); case PWQ_ERROR_FATAL_FAILURE: return QCoreApplication::translate( "PWQ", "Fatal failure" ); default: return QCoreApplication::translate( "PWQ", "Unknown error" ); } } private: 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 ) { if ( !value.canConvert( QVariant::List ) ) { cWarning() << "libpwquality settings is not a list"; return; } QVariantList l = value.toList(); unsigned int requirement_count = 0; auto settings = std::make_shared< PWSettingsHolder >(); for ( const auto& v : l ) { if ( v.type() == QVariant::String ) { QString option = v.toString(); int r = settings->set( option ); if ( r ) { cWarning() << "unrecognized libpwquality setting" << option; } else { cDebug() << Logger::SubEntry << "libpwquality setting" << option; ++requirement_count; } } else { cWarning() << "unrecognized libpwquality setting" << v; } } /* Something actually added? */ if ( requirement_count ) { checks.push_back( PasswordCheck( [settings]() { return settings->explanation(); }, [settings]( const QString& s ) { int r = settings->check( s ); if ( r < 0 ) { cWarning() << "libpwquality error" << r << pwquality_strerror( nullptr, 256, r, nullptr ); } else if ( r < settings->arbitrary_minimum_strength ) { cDebug() << "Password strength" << r << "too low"; } return r >= settings->arbitrary_minimum_strength; }, PasswordCheck::Weight( 100 ) ) ); } } #endif calamares-3.2.41.1/src/modules/users/CheckPWQuality.h000066400000000000000000000050451410275732300223060ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CHECKPWQUALITY_H #define CHECKPWQUALITY_H #include #include #include #include /** * Support for (dynamic) checks on the password's validity. * This can be used to implement password requirements like * "at least 6 characters". Function addPasswordCheck() * instantiates these and adds them to the list of checks. */ class PasswordCheck { public: /** Return true if the string is acceptable. */ using AcceptFunc = std::function< bool( const QString& ) >; using MessageFunc = std::function< QString() >; using Weight = size_t; /** @brief Generate a @p message if @p filter returns true * * When @p filter returns true on the proposed password, the * password is accepted (by this check). If false, then the * @p message will be shown to the user. * * @p weight is used to order the checks (low-weight goes first). */ PasswordCheck( MessageFunc message, AcceptFunc filter, Weight weight = 1000 ); /** @brief Null check, always accepts, no message */ PasswordCheck(); /** Applies this check to the given password string @p s * and returns an empty string if the password is ok * according to this filter. Returns a message describing * what is wrong if not. */ QString filter( const QString& s ) const { return m_accept( s ) ? QString() : m_message(); } Weight weight() const { return m_weight; } bool operator<( const PasswordCheck& other ) const { return weight() < other.weight(); } private: Weight m_weight; MessageFunc m_message; AcceptFunc m_accept; }; using PasswordCheckList = QVector< PasswordCheck >; /* Each of these functions adds a check (if possible) to the list * of checks; they use the configuration value(s) from the * variant. If the value doesn't make sense, each function * may skip adding a check, and do nothing (it should log * an error, though). */ #define _xDEFINE_CHECK_FUNC( x ) add_check_##x( PasswordCheckList& checks, const QVariant& value ) #define DEFINE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x ) #define DECLARE_CHECK_FUNC( x ) void _xDEFINE_CHECK_FUNC( x ); DECLARE_CHECK_FUNC( minLength ) DECLARE_CHECK_FUNC( maxLength ) #ifdef HAVE_LIBPWQUALITY DECLARE_CHECK_FUNC( libpwquality ) #endif #endif calamares-3.2.41.1/src/modules/users/Config.cpp000066400000000000000000000625121410275732300212130ustar00rootroot00000000000000/* === 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 #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 ); } } const NamedEnumTable< HostNameAction >& hostNameActionNames() { // *INDENT-OFF* // clang-format off static const NamedEnumTable< HostNameAction > names { { QStringLiteral( "none" ), HostNameAction::None }, { QStringLiteral( "etcfile" ), HostNameAction::EtcHostname }, { QStringLiteral( "hostnamed" ), HostNameAction::SystemdHostname } }; // clang-format on // *INDENT-ON* return names; } Config::Config( QObject* parent ) : Calamares::ModuleSystem::Config( parent ) { 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() { static QStringList forbidden { "root" }; return forbidden; } 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." ); } for ( const QString& badName : forbiddenLoginNames() ) { if ( 0 == QString::compare( badName, m_loginName, Qt::CaseSensitive ) ) { return tr( "'%1' is not allowed as username." ).arg( badName ); } } 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." ); } return QString(); } void Config::setHostName( const QString& host ) { 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() { static QStringList forbidden { "localhost" }; return forbidden; } 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." ); } for ( const QString& badName : forbiddenHostNames() ) { if ( 0 == QString::compare( badName, m_hostName, Qt::CaseSensitive ) ) { return tr( "'%1' is not allowed as hostname." ).arg( badName ); } } if ( !HOSTNAME_RX.exactMatch( m_hostName ) ) { return tr( "Only letters, numbers, underscore and hyphen are allowed." ); } return QString(); } /** @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; } #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(); } static QString makeHostnameSuggestion( const QStringList& parts ) { static const QRegExp HOSTNAME_RX( "^[a-zA-Z0-9][-a-zA-Z0-9_]*$" ); if ( parts.isEmpty() || parts.first().isEmpty() ) { return QString(); } QString productName = guessProductName(); QString hostnameSuggestion = QStringLiteral( "%1-%2" ).arg( parts.first() ).arg( productName ); 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; emit fullNameChanged( name ); // Build login and hostname, if needed static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ) .replace( QRegExp( "[-']" ), "" ) .replace( rx, " " ) .toLower() .simplified(); QStringList cleanParts = cleanName.split( ' ' ); if ( !m_customLoginName ) { 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 ) { QString hostname = makeHostnameSuggestion( cleanParts ); 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 HostNameActions getHostNameActions( const QVariantMap& configurationMap ) { HostNameAction setHostName = HostNameAction::EtcHostname; QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" ); if ( !hostnameActionString.isEmpty() ) { bool ok = false; setHostName = hostNameActionNames().find( hostnameActionString, ok ); if ( !ok ) { setHostName = HostNameAction::EtcHostname; // Rather than none } } HostNameAction writeHosts = CalamaresUtils::getBool( configurationMap, "writeHostsFile", true ) ? HostNameAction::WriteEtcHosts : HostNameAction::None; return setHostName | writeHosts; } /** @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 ); } } void Config::setConfigurationMap( const QVariantMap& configurationMap ) { 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 setUserShell( shell ); setAutoLoginGroup( either< QString, const QString& >( CalamaresUtils::getString, configurationMap, "autologinGroup", "autoLoginGroup", QString() ) ); setSudoersGroup( CalamaresUtils::getString( configurationMap, "sudoersGroup" ) ); m_hostNameActions = getHostNameActions( configurationMap ); 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 ); 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( hostName(), hostNameActions() ); jobs.append( Calamares::job_ptr( j ) ); return jobs; } calamares-3.2.41.1/src/modules/users/Config.h000066400000000000000000000306601410275732300206570ustar00rootroot00000000000000/* === 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 HostNameAction { 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( HostNameActions, HostNameAction ) Q_DECLARE_OPERATORS_FOR_FLAGS( HostNameActions ) 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( HostNameActions hostNameActions READ hostNameActions 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; } /// The group of which users who can "sudo" must be a member QString sudoersGroup() const { return m_sudoersGroup; } /// 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 m_hostName; } /// Status message about hostname -- empty for "ok" QString hostNameStatus() const; /// How to write the hostname HostNameActions hostNameActions() const { return m_hostNameActions; } /// 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; static const QStringList& forbiddenLoginNames(); static const QStringList& forbiddenHostNames(); 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; 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 HostNameActions m_hostNameActions; PasswordCheckList m_passwordChecks; }; #endif calamares-3.2.41.1/src/modules/users/CreateUserJob.cpp000066400000000000000000000123001410275732300224710ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 Config* config ) : Calamares::Job() , m_config( config ) { } QString CreateUserJob::prettyName() const { return tr( "Create user %1" ).arg( m_config->loginName() ); } QString CreateUserJob::prettyDescription() const { return tr( "Create user %1." ).arg( m_config->loginName() ); } QString CreateUserJob::prettyStatusMessage() const { 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() { QDir destDir; bool reuseHome = false; { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); destDir = QDir( gs->value( "rootMountPoint" ).toString() ); reuseHome = gs->value( "reuseHome" ).toBool(); } // If we're looking to reuse the contents of an existing /home. // This GS setting comes from the **partitioning** module. if ( reuseHome ) { 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 } ); } } cDebug() << "[CREATEUSER]: creating user"; 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 ) { return useraddResult; } 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 ) { return usergroupsResult; } 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(); return commandResult.explainProcess( "chown", std::chrono::seconds( 10 ) /* bogus timeout */ ); } return Calamares::JobResult::ok(); } calamares-3.2.41.1/src/modules/users/CreateUserJob.h000066400000000000000000000013271410275732300221450ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CREATEUSERJOB_H #define CREATEUSERJOB_H #include "Job.h" class Config; class CreateUserJob : public Calamares::Job { Q_OBJECT public: CreateUserJob( const Config* config ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const Config* m_config; QString m_status; }; #endif /* CREATEUSERJOB_H */ calamares-3.2.41.1/src/modules/users/MiscJobs.cpp000066400000000000000000000133151410275732300215140ustar00rootroot00000000000000/* === 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 ) : m_sudoGroup( group ) { } QString SetupSudoJob::prettyName() const { return tr( "Configure
sudo
users." ); } Calamares::JobResult SetupSudoJob::exec() { if ( m_sudoGroup.isEmpty() ) { cDebug() << "Skipping sudo 10-installer because the sudoGroup is empty."; return Calamares::JobResult::ok(); } QString sudoersLine = QString( "%%1 ALL=(ALL) ALL\n" ).arg( m_sudoGroup ); 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(); } calamares-3.2.41.1/src/modules/users/MiscJobs.h000066400000000000000000000020121410275732300211510ustar00rootroot00000000000000/* === 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 "Job.h" class Config; class SetupSudoJob : public Calamares::Job { Q_OBJECT public: SetupSudoJob( const QString& group ); QString prettyName() const override; Calamares::JobResult exec() override; public: QString m_sudoGroup; }; 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 calamares-3.2.41.1/src/modules/users/SetHostNameJob.cpp000066400000000000000000000104451410275732300226310ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "SetHostNameJob.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include #include #include #include #include using WriteMode = CalamaresUtils::System::WriteMode; SetHostNameJob::SetHostNameJob( const QString& hostname, HostNameActions a ) : Calamares::Job() , m_hostname( hostname ) , m_actions( a ) { } QString SetHostNameJob::prettyName() const { return tr( "Set hostname %1" ).arg( m_hostname ); } QString SetHostNameJob::prettyDescription() const { return tr( "Set hostname %1." ).arg( m_hostname ); } QString SetHostNameJob::prettyStatusMessage() const { return tr( "Setting hostname %1." ).arg( m_hostname ); } STATICTEST bool setFileHostname( const QString& hostname ) { return CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/hostname" ), ( hostname + '\n' ).toUtf8(), WriteMode::Overwrite ); } STATICTEST bool writeFileEtcHosts( const QString& hostname ) { // The actual hostname gets substituted in at %1 static const char etc_hosts[] = R"(# 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 )"; return CalamaresUtils::System::instance()->createTargetFile( QStringLiteral( "/etc/hosts" ), QString( etc_hosts ).arg( hostname ).toUtf8(), WriteMode::Overwrite ); } STATICTEST bool setSystemdHostname( const QString& hostname ) { QDBusInterface hostnamed( "org.freedesktop.hostname1", "/org/freedesktop/hostname1", "org.freedesktop.hostname1", QDBusConnection::systemBus() ); if ( !hostnamed.isValid() ) { cWarning() << "Interface" << hostnamed.interface() << "is not valid."; return false; } bool success = true; // Static, writes /etc/hostname { QDBusReply< void > r = hostnamed.call( "SetStaticHostname", hostname, false ); if ( !r.isValid() ) { cWarning() << "Could not set hostname through org.freedesktop.hostname1.SetStaticHostname." << r.error(); success = false; } } // Dynamic, updates kernel { QDBusReply< void > r = hostnamed.call( "SetHostname", hostname, false ); if ( !r.isValid() ) { cWarning() << "Could not set hostname through org.freedesktop.hostname1.SetHostname." << r.error(); success = false; } } return success; } Calamares::JobResult SetHostNameJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); if ( !gs || !gs->contains( "rootMountPoint" ) ) { cError() << "No rootMountPoint in global storage"; return Calamares::JobResult::error( tr( "Internal Error" ) ); } QString destDir = gs->value( "rootMountPoint" ).toString(); if ( !QDir( destDir ).exists() ) { cError() << "rootMountPoint points to a dir which does not exist"; return Calamares::JobResult::error( tr( "Internal Error" ) ); } if ( m_actions & HostNameAction::EtcHostname ) { if ( !setFileHostname( m_hostname ) ) { cError() << "Can't write to hostname file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } if ( m_actions & HostNameAction::WriteEtcHosts ) { if ( !writeFileEtcHosts( m_hostname ) ) { cError() << "Can't write to hosts file"; return Calamares::JobResult::error( tr( "Cannot write hostname to target system" ) ); } } if ( m_actions & HostNameAction::SystemdHostname ) { // Does its own logging setSystemdHostname( m_hostname ); } return Calamares::JobResult::ok(); } calamares-3.2.41.1/src/modules/users/SetHostNameJob.h000066400000000000000000000016161410275732300222760ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef SETHOSTNAMEJOB_CPP_H #define SETHOSTNAMEJOB_CPP_H #include "Config.h" #include "Job.h" class SetHostNameJob : public Calamares::Job { Q_OBJECT public: SetHostNameJob( const QString& hostname, HostNameActions a ); QString prettyName() const override; QString prettyDescription() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; private: const QString m_hostname; const HostNameActions m_actions; }; #endif // SETHOSTNAMEJOB_CPP_H calamares-3.2.41.1/src/modules/users/SetPasswordJob.cpp000066400000000000000000000061241410275732300227140ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * 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 "GlobalStorage.h" #include "JobQueue.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Entropy.h" #include "utils/Logger.h" #include #include #ifndef NO_CRYPT_H #include #endif #include SetPasswordJob::SetPasswordJob( const QString& userName, const QString& newPassword ) : Calamares::Job() , m_userName( userName ) , m_newPassword( newPassword ) { } QString SetPasswordJob::prettyName() const { return tr( "Set password for user %1" ).arg( m_userName ); } QString SetPasswordJob::prettyStatusMessage() const { return tr( "Setting password for user %1." ).arg( m_userName ); } /// Returns a modular hashing salt for method 6 (SHA512) with a 16 character random salt. QString SetPasswordJob::make_salt( int length ) { Q_ASSERT( length >= 8 ); Q_ASSERT( length <= 128 ); QString salt_string; CalamaresUtils::EntropySource source = CalamaresUtils::getPrintableEntropy( length, salt_string ); if ( salt_string.length() != length ) { cWarning() << "getPrintableEntropy returned string of length" << salt_string.length() << "expected" << length; salt_string.truncate( length ); } if ( source != CalamaresUtils::EntropySource::URandom ) { cWarning() << "Entropy data for salt is low-quality."; } salt_string.insert( 0, "$6$" ); salt_string.append( '$' ); return salt_string; } Calamares::JobResult SetPasswordJob::exec() { Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); QDir destDir( gs->value( "rootMountPoint" ).toString() ); if ( !destDir.exists() ) return Calamares::JobResult::error( tr( "Bad destination system path." ), tr( "rootMountPoint is %1" ).arg( destDir.absolutePath() ) ); if ( m_userName == "root" && m_newPassword.isEmpty() ) //special case for disabling root account { int ec = CalamaresUtils::System::instance()->targetEnvCall( { "passwd", "-dl", m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot disable root account." ), tr( "passwd terminated with error code %1." ).arg( ec ) ); return Calamares::JobResult::ok(); } QString encrypted = QString::fromLatin1( crypt( m_newPassword.toUtf8(), make_salt( 16 ).toUtf8() ) ); int ec = CalamaresUtils::System::instance()->targetEnvCall( { "usermod", "-p", encrypted, m_userName } ); if ( ec ) return Calamares::JobResult::error( tr( "Cannot set password for user %1." ).arg( m_userName ), tr( "usermod terminated with error code %1." ).arg( ec ) ); return Calamares::JobResult::ok(); } calamares-3.2.41.1/src/modules/users/SetPasswordJob.h000066400000000000000000000014561410275732300223640ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef SETPASSWORDJOB_H #define SETPASSWORDJOB_H #include "Job.h" class SetPasswordJob : public Calamares::Job { Q_OBJECT public: SetPasswordJob( const QString& userName, const QString& newPassword ); QString prettyName() const override; QString prettyStatusMessage() const override; Calamares::JobResult exec() override; static QString make_salt( int length ); private: QString m_userName; QString m_newPassword; }; #endif /* SETPASSWORDJOB_H */ calamares-3.2.41.1/src/modules/users/TestGroupInformation.cpp000066400000000000000000000114231410275732300241430ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/modules/users/TestPasswordJob.cpp000066400000000000000000000022221410275732300230730ustar00rootroot00000000000000/* === 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" calamares-3.2.41.1/src/modules/users/TestSetHostNameJob.cpp000066400000000000000000000072271410275732300234750ustar00rootroot00000000000000/* === 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 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; }; 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() ); } void UsersTests::testEtcHostname() { cDebug() << "Test dir" << m_dir.path(); 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 ); } } QTEST_GUILESS_MAIN( UsersTests ) #include "utils/moc-warnings.h" #include "TestSetHostNameJob.moc" calamares-3.2.41.1/src/modules/users/Tests.cpp000066400000000000000000000276561410275732300211220ustar00rootroot00000000000000/* === 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 "JobQueue.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include // Implementation details extern void setConfigurationDefaultGroups( const QVariantMap& map, QList< GroupDescription >& defaultGroups ); extern HostNameActions getHostNameActions( const QVariantMap& configurationMap ); extern bool addPasswordCheck( const QString& key, const QVariant& value, PasswordCheckList& passwordChecks ); /** @brief Test Config object methods and internals * */ class UserTests : public QObject { Q_OBJECT public: UserTests(); ~UserTests() override {} private Q_SLOTS: void initTestCase(); // Derpy test for getting and setting regular values void testGetSet(); void testDefaultGroups(); void testDefaultGroupsYAML_data(); void testDefaultGroupsYAML(); void testHostActions_data(); void testHostActions(); void testPasswordChecks(); void testUserPassword(); void testAutoLogin_data(); void testAutoLogin(); }; UserTests::UserTests() {} void UserTests::initTestCase() { Logger::setupLogLevel( Logger::LOGDEBUG ); cDebug() << "Users test started."; if ( !Calamares::JobQueue::instance() ) { (void)new Calamares::JobQueue(); } } void UserTests::testGetSet() { Config c; { 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 ); c.setLoginName( "root" ); QVERIFY( !c.loginNameStatus().isEmpty() ); // can't be root } } 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 ); } void UserTests::testHostActions() { QFETCH( bool, set ); QFETCH( QString, string ); QFETCH( int, result ); QVariantMap m; if ( set ) { m.insert( "setHostname", string ); } QCOMPARE( getHostNameActions( m ), HostNameActions( result ) | HostNameAction::WriteEtcHosts ); // write bits default to true m.insert( "writeHostsFile", false ); QCOMPARE( getHostNameActions( m ), HostNameActions( result ) ); m.insert( "writeHostsFile", true ); QCOMPARE( getHostNameActions( m ), HostNameActions( result ) | HostNameAction::WriteEtcHosts ); } 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 ); } QTEST_GUILESS_MAIN( UserTests ) #include "utils/moc-warnings.h" #include "Tests.moc" calamares-3.2.41.1/src/modules/users/UsersPage.cpp000066400000000000000000000240701410275732300217010ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "UsersPage.h" #include "Config.h" #include "ui_page_usersetup.h" #include "GlobalStorage.h" #include "JobQueue.h" #include "Settings.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/String.h" #include #include #include #include /** @brief Add an error message and pixmap to a label. */ static inline void labelError( QLabel* pix, QLabel* label, CalamaresUtils::ImageType icon, const QString& message ) { label->setText( message ); pix->setPixmap( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, label->size() ) ); } /** @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::StatusOk, CalamaresUtils::Original, label->size() ) ); } /** @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_config( config ) { ui->setupUi( this ); // Connect signals and slots 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 ); 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 ); ui->textBoxFullName->setText( config->fullName() ); connect( ui->textBoxFullName, &QLineEdit::textEdited, config, &Config::setFullName ); connect( config, &Config::fullNameChanged, this, &UsersPage::onFullNameTextEdited ); ui->textBoxHostName->setText( config->hostName() ); connect( ui->textBoxHostName, &QLineEdit::textEdited, config, &Config::setHostName ); connect( config, &Config::hostNameChanged, ui->textBoxHostName, &QLineEdit::setText ); connect( config, &Config::hostNameStatusChanged, this, &UsersPage::reportHostNameStatus ); 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() { delete ui; } void UsersPage::retranslate() { ui->retranslateUi( this ); if ( Calamares::Settings::instance()->isSetupMode() ) { ui->textBoxLoginName->setToolTip( tr( "If more than one person will " "use this computer, you can create multiple " "accounts after setup." ) ); } else { ui->textBoxLoginName->setToolTip( tr( "If more than one person will " "use this computer, you can create multiple " "accounts after installation." ) ); } const auto up = m_config->userPasswordStatus(); reportUserPasswordStatus( up.first, up.second ); const auto rp = m_config->rootPasswordStatus(); reportRootPasswordStatus( rp.first, rp.second ); } void UsersPage::onActivate() { ui->textBoxFullName->setFocus(); const auto up = m_config->userPasswordStatus(); reportUserPasswordStatus( up.first, up.second ); const auto rp = m_config->rootPasswordStatus(); reportRootPasswordStatus( rp.first, rp.second ); } void UsersPage::onFullNameTextEdited( const QString& fullName ) { labelStatus( ui->labelFullName, ui->labelFullNameError, fullName, QString() ); } void UsersPage::reportLoginNameStatus( const QString& status ) { labelStatus( ui->labelUsername, ui->labelUsernameError, m_config->loginName(), status ); } void UsersPage::reportHostNameStatus( const QString& status ) { labelStatus( ui->labelHostname, ui->labelHostnameError, m_config->hostName(), status ); } static inline void passwordStatus( QLabel* iconLabel, QLabel* messageLabel, int validity, const QString& message ) { switch ( validity ) { 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::reportRootPasswordStatus( int validity, const QString& message ) { passwordStatus( ui->labelRootPassword, ui->labelRootPasswordError, validity, message ); } void UsersPage::reportUserPasswordStatus( int validity, const QString& message ) { passwordStatus( ui->labelUserPassword, ui->labelUserPasswordError, validity, message ); } void UsersPage::onReuseUserPasswordChanged( const int checked ) { // 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 ); } calamares-3.2.41.1/src/modules/users/UsersPage.h000066400000000000000000000024301410275732300213420ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef USERSPAGE_H #define USERSPAGE_H #include class Config; class QLabel; namespace Ui { class Page_UserSetup; } class UsersPage : public QWidget { Q_OBJECT public: explicit UsersPage( Config* config, QWidget* parent = nullptr ); ~UsersPage() override; void onActivate(); protected slots: void onFullNameTextEdited( const QString& ); void reportLoginNameStatus( const QString& ); void reportHostNameStatus( const QString& ); void onReuseUserPasswordChanged( const int ); void reportUserPasswordStatus( int, const QString& ); void reportRootPasswordStatus( int, const QString& ); private: void retranslate(); Ui::Page_UserSetup* ui; Config* m_config; }; #endif // USERSPAGE_H calamares-3.2.41.1/src/modules/users/UsersViewStep.cpp000066400000000000000000000037531410275732300226000ustar00rootroot00000000000000/* === 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-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "UsersViewStep.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" CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersViewStepFactory, registerPlugin< UsersViewStep >(); ) UsersViewStep::UsersViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_config( new Config( this ) ) { connect( m_config, &Config::readyChanged, this, &UsersViewStep::nextStatusChanged ); emit nextStatusChanged( m_config->isReady() ); } UsersViewStep::~UsersViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString UsersViewStep::prettyName() const { return tr( "Users" ); } QWidget* UsersViewStep::widget() { if ( !m_widget ) { m_widget = new UsersPage( m_config ); } return m_widget; } bool UsersViewStep::isNextEnabled() const { return m_config->isReady(); } bool UsersViewStep::isBackEnabled() const { return true; } bool UsersViewStep::isAtBeginning() const { return true; } bool UsersViewStep::isAtEnd() const { return true; } Calamares::JobList UsersViewStep::jobs() const { return m_config->createJobs(); } void UsersViewStep::onActivate() { if ( m_widget ) { m_widget->onActivate(); } } void UsersViewStep::onLeave() { m_config->finalizeGlobalStorage(); } void UsersViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( configurationMap ); } calamares-3.2.41.1/src/modules/users/UsersViewStep.h000066400000000000000000000024151410275732300222370ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef USERSPAGEPLUGIN_H #define USERSPAGEPLUGIN_H #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include class Config; class UsersPage; class PLUGINDLLEXPORT UsersViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit UsersViewStep( QObject* parent = nullptr ); ~UsersViewStep() override; QString prettyName() const override; QWidget* widget() 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; void onLeave() override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: UsersPage* m_widget; Config* m_config; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersViewStepFactory ) #endif // USERSPAGEPLUGIN_H calamares-3.2.41.1/src/modules/users/images/000077500000000000000000000000001410275732300205415ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/users/images/invalid.png000066400000000000000000000172161410275732300227040ustar00rootroot00000000000000PNG  IHDRifԿbKGD pHYs  tIME !,iTXtCommentCreated with GIMPd.eIDATxyp\}Ι}  C$%%+:x(ΖHfʎ7F@ʛıUN+\++ZIɒ*tX(/Fx ]}3B0`k7~4}>Mk"OJCml,4M72ẩAx| i6!D.1tNtFh fJ  8d2 94LA~Z*kgJ441-P@rRH r,Qu)ƬBz@3,'l-Z ZU /A@>@u5IwM40 ;{]]|"s|󿶵DBNU6v4D"דy--CC R\3I)1PmP) .|u#9aiGK}u55eK t)ϜR 體 $dYh`0őq`ByU  Vr]~c?ܼV /^(&4,c "DGE߮K=7Nū |ᆪʻoZ_#G鋮@YE HׅRQ`e J~/wW KX7~uWYu+um;6 8c U@`[EQMk*.@ciǒ_a~y:荍H!8͕( ceASXrnb۱Xc {K2ZփT#}}'))iWAePR2yo, A%_iU~=H$!SɫZMʊPRF¨mBGw^(WH]2zs uD!HD9NsFeVYSz{9eEnrkC5Dq(%ACaTx7$W_W/w9yqO7ԬhВz1({s@)PUp1>< ]W^;VYG  0(z(r8|;X۬CnKՅoo\,mAiߵHhDte.n*.AEZJ Յk[ŮB[fZAL]Ay)U і#iϬ(_x (MC3=xr ѕ`vŔ/Z8;66UVS }ㆅM7`P,"]τ%g Ҏ?scMuupz{Ƣפ%WBrbk|߯282b.fڟ. WΛ."ۓu8u\ H$aDXXRWzѢ!xꪢ&$."H&p=ĝR@*JfY}R"zHRH>T:Br05 C=AD(8;jklDnnj1t ]LPpD2 V7%7n?0 Y2DB` Ԅi!\P4 i`ӬG:.PA-R;\rkQ߿+{d JK`b%H)&'%S)T֭XìIKV,o blsJPsǝX+*Fc!BI(s |0a!lP)?F$iSEء?nYPf_< pn܈+W* Dc?R}I!08y [[\yz#m܈ 9Kק=NI縔J5:v;=iCz[5+<~xU]V X7jl'\QaĎ Z]M).OPi3[[ACߨ5Mո?4B$砆P 9N ;:muww_Wd+KB f˩+!!$c0kkǽ6[[A\zu(ˆf 7-A[[Am{kZ(u@z%׃a | lRE+ִHqR8χ rVHnĮ, y6lނAAiW*$tlނmƐXxz34,BQbF6/^:-Hhe+me#58T =tGcǑ%y P2m-z߼K& W^=[s0QeY6fZc盚ZlYv8htږp5?[7|:o^o/b'P<*k'<lEK)ѹ){Eغ}n `&|eߊF_2;jj7{*+ntsѽBlĠ|hiHoي9pnؚͤaAn mD bBHwUVB2 gei8GyӋ tr˕ -[Ѳ}{N:z> [`Pfl- BI%x'w.oH;_ )T >4نRȔ5RH.QN]HHlŲTHP$4h"zߎF)o*( srH&E):3PRb|mB: lv(pנL(PRHz>nŲ&1TV ,]̙q+p߇nb X?yԵ ].ĕH!> E)ՉA6o ,n,߶-7@;ݻaZ.jf\`2Jʗ)I]UUjKJ DqPl2z{1j2Wqc3q$(Rǂ-[GrN?$:vfBS*eH2ݯ$]g@E^^`#`US ޷ z8Q-E@%v"yAU}*3WP߹:-AAg[SO"QA'AL1IJ̄Y)eIwR6ue\1{,@ #7}xI޻:%\)aHYUR4Do/Wȏ[T(Lch߳]ȹC9gNB TP !Ց*s F7 pBklۑ̈́HPJ$d0ȬH2pQ2.7om۠MIr*)m۠7ހb TUwIf)1I{([8[4Pkmx@>J I)( (sf)]' wm)nl8խPJܛ!͗Q?HJ F)f70_:!hشk hD`R! ]) Cg2/ )qMBX AJJPBE/ \!S72{*O:$hش0)p|Ng&1W'\B!\:,QtA)% xq!TC) 04t(JpצAJ۵{dw\wW&t!ia 3FCf`&<᧧8Mq'-DIK4H@Ӏd Y sS{p>sJ;zsTpX~=h @mT U%Hy>.'Spۖ7$"v; 3ÉiK HЩ={ +T];1(@ pzz0XJPYA,@R8M Ry9QLc ihknEwm>@|HP` }GJQ;A(PJ)L%0{Mml3oK7PdZM$"A|)a!7.@Q mA씂fyz=P}ӻ&eUWT~`S>JW\Tq(Z2rCnފFVQR#:2g渒   zjLP ˎA}e ?\TK3D~cyMpM?LS(`WV=C ԟ=q"gE>#}?%&JB!/xU ttd"P0x 0lJiK/#v$J `g'bǏϝ;LJĜ]RoG,s^ݕMlbÀmwi3յ4Jsgu}$JWŸR)*Bsy{~h=qݼ|}Xی MHT>ylSpCCsy>C2zw-+흝]B?wTCa0K!w3 \!Z |\ǑσS}ZUBJF) l8:^: IH2+*ơK]ܕ}O:<%T~-Iz*.PlZ]GN P aiEt՜?|ĉ7<^Nc1gSUQRIb,%!†磣H_yߟuHf4zᶊ^V$ :8:t.R7az$8Q$omo9ʽҠ(aPݼ#RSm- I\Qk`] "k{ HT vP^w7bA!,͞wk~ç 7B4uqux!aUUN_~}B-[0%otJM[cn7)z5뫫a:>ŀB(u8+iF3ՠ軷WUUJ}V*J"4 W]y pCM ~}p}]mOxMnؠt6 ~0;'Qo啕CIxR".jkg,+VRB )a0A A"ceffB ЕHspAz?r)p[ k* *x(\h]a|['dCXB |8\ 2gj @б!C$\>_Hא3V Xe.%NJ " <*$3(1 I)J- u†ÅD ?Ps|3߱҇ !*W"yHP18l`Q{WUm-/(B1H GBF02 q!P騰-f^'\ʔ;g瞺x]cJ13o$UPHl=󩍀6$rU+#1)!0^DRυ>3nQ QhfB"݀g: ]K@h"~y,#ITFB`,1(8Z1ưUJHKK(-|a|NAN)La$l2FQҟKG$*2HqR*?D"{>XPF31R0"ҤfRi V  n-+[Pjk r6%@ $}ce &= @ 3'\K{Rοrh;oFѪFbThHǪOeClkpdѼpxic(% (acڃ<R!_Ņ+N}wdL';29ƙjpwO3V2dXrɠt2˹9އm)kTʞvSu IENDB`calamares-3.2.41.1/src/modules/users/images/invalid.png.license000066400000000000000000000001421410275732300243130ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/users/images/valid.png000066400000000000000000000161641410275732300223560ustar00rootroot00000000000000PNG  IHDRii9 :bKGD pHYs  tIME "#fiTXtCommentCreated with GIMPd.eIDATxy]U{o<'@fP* Xe,ME]8UjKlŮ`( X.TB @ dt=%<^ޗ쬽]so;p.r.`ʍ\s{PWHAeE}iHDZLYdRgZaK)d˴8xRѨXZXK*)16qUVtTA 1LϵR E\ChbBYM-(jJ }ІQY싶*cqk3H4ʪp:Js=OLݷ:r9&ȧ2N OxH\\L0X,ž,wg1h1B舚)*tK,[=W"֓[w4\Oֱ my3ffODG'imeP6X=LXS+ MdBjBlBMH-F(pE#$KBHVbO/[wC=ǒ(D*HCaIOGi`4fgRpZʺ#6 R:/i pjRaoO'PwjnC}8噌 /9s ff&WuQ5et '` I$ d7VhSwvkӧ.Yv,c.nR$/}|'a)e-{JpuXշyUXy,pmÄٵDo:5sΕ +ZLѝtb>) K LJḮlݷ_w\>V~0!!]}WA;\qyY]6]NBSCj @Bg6]ݵ[ ꄁt]Ks˗N|Lgwq އfH*!>6l֗z~J|_wIw>Th|S&;ES&@t) veǢм)s9 ֶ=;u%d-՗S}SP$6ZH;)ZZ8[]q;{ꁸ|IҵP~sf^;e [LSX I9> ټk/x1iIfM歅]={vܩKy&4ZhkI;)Fy^%'5'4S-_6ky|i3U f=+Bc!-S >gvFy[ӧ9a>fRGk/Y J[H̫+@&W_0H+뮞s`2/긮^MRV#&s(U_%޳E;O0u]4O.eky7I !䫒˜8H2~/#ܮξ?9bGk]Jy.[6+Igpް!W5Q'0ҴF/>'Zc/up} us混/IQR/*9/imtuVVuY#(l[MO`=;Ro_0}*nͥ$`/tW&"r^ۥ8_w)T}ur+3R-"6 )axTh"@H1 &>z MD` Sf;vT'O;$we-mD:PX"02!@ņj%"I4E |2yFC(-A2^~q }vǕWNj39ȳ܍2GȣwS/qh(jg|*^K(TɷHG`EVkM>czU ¸9\[69E.=TQh+Y/-oarf [ujX ܆zZO" ]չ_{a!]pjjO`D1]jJ2+xYPgOZShcӡGǓ!HWR BZusGl/CQ XéWm]u@n!O_ ck& iڞtd}.)tӓ9z$9E=$.9rCm' c̵D|2Oܛ]xeMctEG^ϧ{֞BnY;J90mL1܍cX%d|\Zە0vH=gdJt c,}qr#(.\;2* ?!{J'4%T3𝣰I$ 6~zJT qRsѷFt`-?v#'hR |\9k'Y'_J=Cj=!N- k)o%߈X[t5~kiVڠ%yioFV[{Ӑ{xR R Ŝ".NR ۺw-?uc~ m-+!d)H2)6fBMbrCU=Nc9l?5 ҂0XOb Z e7hyh X'4V}j껭eTɡr>[ղ>zHׂ4( gonК: !=u."j*pU(OakU:tL SKɻБ[Ъe7$f|VDHOsd2xXE]mֻ`ZSu N7ϿL"]cT}$4{[^e$LjW1"BxRq|ԝ'!6k-B]pKc,V5Y;3흼cWl=xyFk6}7iC0"V-|ЀZ#[nĈzCyh-RRM*6hiz jK cڳ prA~z$MyºD0BV-_M!=~<INXd_"p QH+<$c[cƕYwdaZvɈiϸ tW p$Js[.h|#VX'DΏ%6 kL`N:Dʐq1ݏ@8R9_F+F@a=kH1XÉRX<#Qb@Ӎk1fgrL.H} )G:+/1){(.kypߣpx@Z2~@/ymMh8uǺfˆO=%0@4B+ gm(4h??yEFs/FG2UZ:}7n:> vajK5end5LsUX q0IydgX ;Yg(9oe0>FI\ʳTqQ6biem "Ej,<5&Hǵ2TM]2 v A-;UqE˝@jbPƌqm[}Yб͍x2R^ .]vԴ}e(jp-Ucۚ&҆×Y\PJM֓{(6Ɗ=OrӐY}=~/Aq5R=Gґ8Tk:GFF^UmJQ.sIFIyζ<'{yx $R'YkiK{H)Ƙnh˧R>Df[-Jkε& s IH{ȦHtTiIW*Dak#y[GtUabJQ @n3F}<}1zz=MOm%wˡR2yӖCWeJϐ*HqxR).k=L;M'%LIVy)_ Ūa0Z{쫒Q<}=0 ~7Āߋ!PQ| uŎ+eՒJEGo^)ɜS[eŖ!PۭbOU6 |;Yc2&~#GPu(PC{> \O,sIՠtP)"r>c%aGV=%Ir.&ȥ$=eΈPaypݐ< CHp)l%@pg`AG_/&]2-+@OJ20"EXyeb 2s|A>2ŧ%``1`1{Wjg6wC 򆸟 V@+$gm HU+>y>?%v]H! r= ɒ+uwXi۟'rF< jtJ[[g68 pMP@9 c>M'2os&or}1BJRwϚ.#Kg\G sA#-RH/UCC52T"]wJT1ڥ?>bv_7aL j4cAjPlAנ[I۟[6cwn}M6ǩ瓐\)p@JH\8x|PmIE[[_N 1 +vK^?|_V 03`6Xa+Ao0j$`7#oyg &qf -fJO)Z 1wEkl4}*]QE.u{&7<^N%c$0mB ~/cX\p1rF7vwޔ%ub1)w2~FddzqHYED"+ֹWo]t*[ICsf!TOf5k !ECboQ r<P/ps;Dd5m8q 4|g2i#܋m`3C}oF#|`9܁D:hHfo^(fFx9V1(VGvhPF6`lgbE< HS4Q@婰gSIENDB`calamares-3.2.41.1/src/modules/users/images/valid.png.license000066400000000000000000000001421410275732300237640ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/users/page_usersetup.ui000066400000000000000000000423301410275732300226700ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later Page_UserSetup 0 0 862 683 Form Qt::Vertical QSizePolicy::Fixed 20 6 What is your name? 200 0 Your Full Name 0 0 24 24 24 24 true 1 0 true Qt::Vertical QSizePolicy::Fixed 20 6 What name do you want to use to log in? false 0 0 200 0 login 0 0 24 24 24 24 true 1 0 200 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 What is the name of this computer? false 0 0 200 0 <small>This name will be used if you make the computer visible to others on a network.</small> Computer Name 0 0 24 24 24 24 true 1 0 200 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 Choose a password to keep your account safe. false 0 0 200 0 <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> QLineEdit::Password Password 0 0 200 0 <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> QLineEdit::Password Repeat Password 0 0 24 24 24 24 true 1 0 100 0 Qt::AlignVCenter true Qt::Vertical QSizePolicy::Fixed 20 6 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. Qt::Vertical QSizePolicy::Fixed 20 6 Choose a password for the administrator account. false 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors.</small> QLineEdit::Password Password 0 0 200 0 <small>Enter the same password twice, so that it can be checked for typing errors.</small> QLineEdit::Password Repeat Password 0 0 24 24 24 24 true 1 0 100 0 Qt::AlignVCenter true Qt::Vertical 20 1 calamares-3.2.41.1/src/modules/users/tests/000077500000000000000000000000001410275732300204365ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/users/tests/3-wing.conf000066400000000000000000000001541410275732300224110ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- defaultGroups: [ wing, wheel, users ] calamares-3.2.41.1/src/modules/users/tests/4-audio.conf000066400000000000000000000002021410275732300225410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- defaultGroups: - users - lp - wheel - audio calamares-3.2.41.1/src/modules/users/tests/5-issue-1523.conf000066400000000000000000000003761410275732300231750ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/users/tests/6a-issue-1672.conf000066400000000000000000000001631410275732300233360ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autologinGroup: derp doAutologin: true calamares-3.2.41.1/src/modules/users/tests/6b-issue-1672.conf000066400000000000000000000001631410275732300233370ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autologinGroup: derp doAutoLogin: true calamares-3.2.41.1/src/modules/users/tests/6c-issue-1672.conf000066400000000000000000000001631410275732300233400ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autoLoginGroup: derp doAutologin: true calamares-3.2.41.1/src/modules/users/tests/6d-issue-1672.conf000066400000000000000000000001631410275732300233410ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- autoLoginGroup: derp doAutoLogin: true calamares-3.2.41.1/src/modules/users/tests/6e-issue-1672.conf000066400000000000000000000001571410275732300233450ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- doautologin: true autologingroup: wheel calamares-3.2.41.1/src/modules/users/users.conf000066400000000000000000000144031410275732300213060ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # Configuration for the one-user-system user module. # # 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 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: - name: users must_exist: true system: true - lp - video - network - storage - name: wheel must_exist: false system: true - audio # Some Distributions require a 'autologin' group for the user. # Autologin causes a user to become automatically logged in to # the desktop environment on boot. # Disable when your Distribution does not require such a group. autologinGroup: autologin # You can control the initial state for the 'autologin checkbox' here. # Possible values are: # - true to check or # - false to uncheck # These set the **initial** state of the checkbox. doAutologin: true # When *sudoersGroup* is set to a non-empty string, Calamares creates a # sudoers file for the user. This file is located at: # `/etc/sudoers.d/10-installer` # Remember to add the (value of) *sudoersGroup* to *defaultGroups*. # # If your Distribution already sets up a group of sudoers in its packaging, # remove this setting (delete or comment out the line below). Otherwise, # the setting will be duplicated in the `/etc/sudoers.d/10-installer` file, # potentially confusing users. sudoersGroup: wheel # Setting this to false, causes the root account to be disabled. # When disabled, hides the "Use the same password for administrator" # checkbox. Also hides the "Choose a password" and associated text-inputs. setRootPassword: true # You can control the initial state for the 'reuse password for root' # checkbox here. Possible values are: # - true to check or # - false to uncheck # # When checked, the user password is used for the root account too. # # NOTE: *doReusePassword* requires *setRootPassword* to be enabled. doReusePassword: true # These are optional password-requirements that a distro can enforce # on the user. The values given in this sample file set only very weak # validation settings. # # - nonempty rejects empty passwords # - there are no length validations # - libpwquality (if it is enabled at all) has no length of class # restrictions, although it will still reject palindromes and # dictionary words with these settings. # # Checks may be listed multiple times; each is checked separately, # and no effort is done to ensure that the checks are consistent # (e.g. specifying a maximum length less than the minimum length # will annoy users). # # The libpwquality check relies on the (optional) libpwquality library. # Its value is a list of configuration statements that could also # be found in pwquality.conf, and these are handed off to the # libpwquality parser for evaluation. The check is ignored if # libpwquality is not available at build time (generates a warning in # the log). The Calamares password check rejects passwords with a # score of < 40 with the given libpwquality settings. # # (additional checks may be implemented in CheckPWQuality.cpp and # wired into UsersPage.cpp) # # - To disable specific password validations: # comment out the relevant 'passwordRequirements' keys below. # - To disable all password validations: # set both 'allowWeakPasswords' and 'allowWeakPasswordsDefault' to true. # (That will show the box *Allow weak passwords* in the user- # interface, and check it by default). passwordRequirements: nonempty: true minLength: -1 # Password at least this many characters maxLength: -1 # Password at most this many characters libpwquality: - minlen=0 - minclass=0 # You can control the visibility of the 'strong passwords' checkbox here. # Possible values are: # - true to show or # - false to hide (default) # the checkbox. This checkbox allows the user to choose to disable # password-strength-checks. By default the box is **hidden**, so # that you have to pick a password that satisfies the checks. allowWeakPasswords: false # You can control the initial state for the 'strong passwords' checkbox here. # Possible values are: # - true to uncheck or # - false to check (default) # the checkbox by default. Since the box is labeled to enforce strong # passwords, in order to **allow** weak ones by default, the box needs # 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 # Hostname setting # # The user can enter a hostname; this is configured into the system # in some way; pick one of: # - *None*, to not set the hostname at all # - *EtcFile*, to write to `/etc/hostname` directly # - *Hostnamed*, to use systemd hostnamed(1) over DBus # The default is *EtcFile*. setHostname: EtcFile # Should /etc/hosts be written with a hostname for this machine # (also adds localhost and some ipv6 standard entries). # Defaults to *true*. writeHostsFile: true presets: fullName: # value: "OEM User" editable: true loginName: # value: "oem" editable: true calamares-3.2.41.1/src/modules/users/users.qrc000066400000000000000000000002071410275732300211430ustar00rootroot00000000000000 images/invalid.png images/valid.png calamares-3.2.41.1/src/modules/users/users.schema.yaml000066400000000000000000000042451410275732300225650ustar00rootroot00000000000000# 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 } # 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 } # 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 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 calamares-3.2.41.1/src/modules/usersq/000077500000000000000000000000001410275732300174555ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/usersq/CMakeLists.txt000066400000000000000000000027331410275732300222220ustar00rootroot00000000000000# === 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 ) calamares-3.2.41.1/src/modules/usersq/UsersQmlViewStep.cpp000066400000000000000000000033541410275732300234300ustar00rootroot00000000000000/* === 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 } calamares-3.2.41.1/src/modules/usersq/UsersQmlViewStep.h000066400000000000000000000024611410275732300230730ustar00rootroot00000000000000/* === 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 calamares-3.2.41.1/src/modules/usersq/usersq.conf000066400000000000000000000014241410275732300216470ustar00rootroot00000000000000# 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 calamares-3.2.41.1/src/modules/usersq/usersq.qml000066400000000000000000000373671410275732300215320ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2020 - 2021 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 visible: false type: Kirigami.MessageType.Error text: qsTr("Only lowercase letters, numbers, underscore and hyphen are allowed.") } Kirigami.InlineMessage { id: forbiddenMessage Layout.fillWidth: 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 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 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 } } } calamares-3.2.41.1/src/modules/usersq/usersq.qrc000066400000000000000000000001161410275732300215040ustar00rootroot00000000000000 usersq.qml calamares-3.2.41.1/src/modules/webview/000077500000000000000000000000001410275732300176035ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/webview/CMakeLists.txt000066400000000000000000000036561410275732300223550ustar00rootroot00000000000000# === 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) set( _reason "" ) message( STATUS "Found Qt version ${Qt5Core_VERSION}") if ( Qt5Core_VERSION VERSION_LESS 5.6 OR WEBVIEW_FORCE_WEBKIT ) message( STATUS " .. using webkit") find_package( Qt5 ${QT_VERSION} CONFIG COMPONENTS WebKit WebKitWidgets ) if ( Qt5WebKit_FOUND AND Qt5WebKitWidgets_FOUND ) list( APPEND CALA_WEBVIEW_INCLUDE_DIRECTORIES ${QT_QTWEBKIT_INCLUDE_DIR} ) list( APPEND CALA_WEBVIEW_LINK_LIBRARIES Qt5::WebKit Qt5::WebKitWidgets ) set( WEBVIEW_WITH_WEBKIT 1 ) else() set( _reason "No suitable WebKit" ) endif() else() message( STATUS " .. using webengine") find_package( Qt5 ${QT_VERSION} CONFIG COMPONENTS WebEngine WebEngineWidgets ) if ( Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND ) list( APPEND CALA_WEBVIEW_INCLUDE_DIRECTORIES ${QT_QTWEBENGINE_INCLUDE_DIR} ) list( APPEND CALA_WEBVIEW_LINK_LIBRARIES Qt5::WebEngine Qt5::WebEngineWidgets ) set( WEBVIEW_WITH_WEBENGINE 1 ) else() set( _reason "No suitable WebEngine" ) endif() endif() if ( NOT _reason ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/WebViewConfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/WebViewConfig.h ) calamares_add_plugin( webview TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES WebViewStep.cpp LINK_PRIVATE_LIBRARIES ${CALA_WEBVIEW_LINK_LIBRARIES} SHARED_LIB ) else() calamares_skip_module( "webview (${_reason})" ) endif() calamares-3.2.41.1/src/modules/webview/WebViewConfig.h.in000066400000000000000000000003611410275732300230570ustar00rootroot00000000000000/* SPDX-FileCopyrightText: no SPDX-License-Identifier: CC0-1.0 */ #ifndef CALAMARESWEBVIEWCONFIG_H #define CALAMARESWEBVIEWCONFIG_H #cmakedefine WEBVIEW_WITH_WEBENGINE #cmakedefine WEBVIEW_WITH_WEBKIT #endif // CALAMARESWEBVIEWCONFIG_H calamares-3.2.41.1/src/modules/webview/WebViewStep.cpp000066400000000000000000000045121410275732300225150ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2015 Rohan Garg * SPDX-FileCopyrightText: 2016 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "WebViewStep.h" #include #ifdef WEBVIEW_WITH_WEBKIT #include #else #include #include #endif CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin< WebViewStep >(); ) WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) { emit nextStatusChanged( true ); #ifdef WEBVIEW_WITH_WEBENGINE QtWebEngine::initialize(); #endif 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 ); #endif } WebViewStep::~WebViewStep() { if ( m_view && m_view->parent() == nullptr ) { m_view->deleteLater(); } } QString WebViewStep::prettyName() const { return m_prettyName; } QWidget* WebViewStep::widget() { return m_view; } bool WebViewStep::isNextEnabled() const { return true; } bool WebViewStep::isBackEnabled() const { return true; } bool WebViewStep::isAtBeginning() const { return true; } bool WebViewStep::isAtEnd() const { return true; } void WebViewStep::onActivate() { m_view->load( QUrl( m_url ) ); m_view->show(); } QList< Calamares::job_ptr > WebViewStep::jobs() const { return QList< Calamares::job_ptr >(); } 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( "prettyName" ) && configurationMap.value( "prettyName" ).type() == QVariant::String ) { m_prettyName = configurationMap.value( "prettyName" ).toString(); } } calamares-3.2.41.1/src/modules/webview/WebViewStep.h000066400000000000000000000031061410275732300221600ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef WEBVIEWPLUGIN_H #define WEBVIEWPLUGIN_H #include "WebViewConfig.h" #include "DllMacro.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #ifdef WEBVIEW_WITH_WEBKIT #define C_QWEBVIEW QWebView #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; class PLUGINDLLEXPORT WebViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit WebViewStep( QObject* parent = nullptr ); ~WebViewStep() override; QString prettyName() const override; QWidget* widget() override; void onActivate() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; QList< Calamares::job_ptr > jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; private: C_QWEBVIEW* m_view; QString m_url; QString m_prettyName; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WebViewStepFactory ) #endif // WEBVIEWPLUGIN_H calamares-3.2.41.1/src/modules/webview/owncloud.conf000066400000000000000000000002001410275732300222740ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- prettyName: "OwnCloud" url: "https://owncloud.org" calamares-3.2.41.1/src/modules/webview/webview.conf000066400000000000000000000001771410275732300221270ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # --- prettyName: "Webview" url: "https://calamares.io" calamares-3.2.41.1/src/modules/welcome/000077500000000000000000000000001410275732300175665ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/welcome/CMakeLists.txt000066400000000000000000000020711410275732300223260ustar00rootroot00000000000000# === 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} ) else() set( PARTMAN_SRC ) set( CHECKER_LINK_LIBRARIES ) 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} WelcomeViewStep.cpp Config.cpp Config.h WelcomePage.cpp UI WelcomePage.ui RESOURCES welcome.qrc LINK_PRIVATE_LIBRARIES ${CHECKER_LINK_LIBRARIES} Qt5::DBus Qt5::Network SHARED_LIB ) calamares-3.2.41.1/src/modules/welcome/Config.cpp000066400000000000000000000303501410275732300215000ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "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_languages( CalamaresUtils::Locale::availableTranslations() ) , m_filtermodel( std::make_unique< QSortFilterProxyModel >() ) { initLanguages(); 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::instance()->versionedName() ); emit genericWelcomeMessageChanged( m_genericWelcomeMessage ); const auto* r = requirementsModel(); if ( !r->satisfiedRequirements() ) { QString message; const bool setup = Calamares::Settings::instance()->isSetupMode(); if ( !r->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_warningMessage = message.arg( Calamares::Branding::instance()->shortVersionedName() ); } else { m_warningMessage = tr( "This program will ask you some questions and " "set up %2 on your computer." ) .arg( Calamares::Branding::instance()->productName() ); } emit warningMessageChanged( m_warningMessage ); } CalamaresUtils::Locale::LabelModel* Config::languagesModel() const { return m_languages; } Calamares::RequirementsModel* Config::requirementsModel() const { return Calamares::ModuleManager::instance()->requirementsModel(); } 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 { return m_languageIcon; } void Config::initLanguages() { // Find the best initial translation QLocale defaultLocale = QLocale( QLocale::system().name() ); cDebug() << "Matching locale" << defaultLocale; int matchedLocaleIndex = m_languages->find( [&]( const QLocale& x ) { return x.language() == defaultLocale.language() && x.country() == defaultLocale.country(); } ); if ( matchedLocaleIndex < 0 ) { cDebug() << Logger::SubEntry << "Matching 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 << "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 ) { 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; } } void Config::setCountryCode( const QString& countryCode ) { m_countryCode = countryCode; setLocaleIndex( CalamaresUtils::Locale::availableTranslations()->find( m_countryCode ) ); emit countryCodeChanged( m_countryCode ); } void Config::setLanguageIcon( const QString& languageIcon ) { m_languageIcon = languageIcon; } void Config::setLocaleIndex( int index ) { if ( index == m_localeIndex || index > CalamaresUtils::Locale::availableTranslations()->rowCount( QModelIndex() ) || index < 0 ) { return; } 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() ); if ( Calamares::JobQueue::instance() && Calamares::JobQueue::instance()->globalStorage() ) { CalamaresUtils::Locale::insertGS( *Calamares::JobQueue::instance()->globalStorage(), QStringLiteral( "LANG" ), CalamaresUtils::translatorLocaleName() ); } emit localeIndexChanged( m_localeIndex ); } void Config::setIsNextEnabled( bool isNextEnabled ) { m_isNextEnabled = isNextEnabled; emit isNextEnabledChanged( m_isNextEnabled ); } void Config::setDonateUrl( const QString& url ) { m_donateUrl = url; emit donateUrlChanged(); } void Config::setKnownIssuesUrl( const QString& url ) { m_knownIssuesUrl = url; emit knownIssuesUrlChanged(); } void Config::setReleaseNotesUrl( const QString& url ) { m_releaseNotesUrl = url; emit releaseNotesUrlChanged(); } void Config::setSupportUrl( const QString& url ) { m_supportUrl = url; emit supportUrlChanged(); } QString Config::genericWelcomeMessage() const { QString message; if ( Calamares::Settings::instance()->isSetupMode() ) { message = Calamares::Branding::instance()->welcomeStyleCalamares() ? 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

" ); } return message; } QString 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 ); } calamares-3.2.41.1/src/modules/welcome/Config.h000066400000000000000000000113451410275732300211500ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef WELCOME_CONFIG_H #define WELCOME_CONFIG_H #include "locale/LabelModel.h" #include "modulesystem/RequirementsModel.h" #include #include #include #include class Config : public QObject { Q_OBJECT /** @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::LabelModel* 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 ) Q_PROPERTY( QString countryCode MEMBER m_countryCode NOTIFY countryCodeChanged FINAL ) Q_PROPERTY( int localeIndex READ localeIndex WRITE setLocaleIndex NOTIFY localeIndexChanged ) Q_PROPERTY( QString genericWelcomeMessage MEMBER m_genericWelcomeMessage NOTIFY genericWelcomeMessageChanged FINAL ) Q_PROPERTY( QString warningMessage READ warningMessage NOTIFY warningMessageChanged FINAL ) Q_PROPERTY( QString supportUrl MEMBER m_supportUrl NOTIFY supportUrlChanged FINAL ) Q_PROPERTY( QString knownIssuesUrl MEMBER m_knownIssuesUrl NOTIFY knownIssuesUrlChanged FINAL ) Q_PROPERTY( QString releaseNotesUrl MEMBER m_releaseNotesUrl NOTIFY releaseNotesUrlChanged FINAL ) Q_PROPERTY( QString donateUrl MEMBER m_donateUrl NOTIFY donateUrlChanged FINAL ) Q_PROPERTY( bool isNextEnabled MEMBER m_isNextEnabled NOTIFY isNextEnabledChanged FINAL ) public: Config( QObject* parent = nullptr ); void setConfigurationMap( const QVariantMap& ); void setCountryCode( const QString& countryCode ); QString languageIcon() const; void setLanguageIcon( const QString& languageIcon ); void setIsNextEnabled( bool isNextEnabled ); int localeIndex() const { return m_localeIndex; } void setLocaleIndex( int index ); QString supportUrl() const { return m_supportUrl; } void setSupportUrl( const QString& url ); QString knownIssuesUrl() const { return m_knownIssuesUrl; } void setKnownIssuesUrl( const QString& url ); QString releaseNotesUrl() const { return m_releaseNotesUrl; } void setReleaseNotesUrl( const QString& url ); QString donateUrl() const { return m_donateUrl; } void setDonateUrl( const QString& url ); QString genericWelcomeMessage() const; QString warningMessage() const; public slots: CalamaresUtils::Locale::LabelModel* languagesModel() const; void retranslate(); ///@brief The **global** requirements model, from ModuleManager Calamares::RequirementsModel* requirementsModel() const; QAbstractItemModel* unsatisfiedRequirements() const; signals: void countryCodeChanged( QString countryCode ); void localeIndexChanged( int localeIndex ); void isNextEnabledChanged( bool isNextEnabled ); void genericWelcomeMessageChanged( QString message ); void warningMessageChanged( QString message ); void supportUrlChanged(); void knownIssuesUrlChanged(); void releaseNotesUrlChanged(); void donateUrlChanged(); private: void initLanguages(); CalamaresUtils::Locale::LabelModel* m_languages = nullptr; std::unique_ptr< QSortFilterProxyModel > m_filtermodel; QString m_languageIcon; QString m_countryCode; int m_localeIndex = 0; bool m_isNextEnabled = false; QString m_genericWelcomeMessage; QString m_warningMessage; QString m_supportUrl; QString m_knownIssuesUrl; QString m_releaseNotesUrl; QString m_donateUrl; }; #endif calamares-3.2.41.1/src/modules/welcome/WelcomePage.cpp000066400000000000000000000221561410275732300224700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "WelcomePage.h" #include "checker/CheckerContainer.h" #include "ui_WelcomePage.h" #include "Branding.h" #include "CalamaresVersion.h" #include "Config.h" #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 #include #include #include #include #include #include WelcomePage::WelcomePage( Config* config, QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomePage ) , m_checkingWidget( new CheckerContainer( config, this ) ) , m_languages( nullptr ) , 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()->requirementsModel(), &Calamares::RequirementsModel::progressMessageChanged, m_checkingWidget, &CheckerContainer::requirementsProgress ); } void WelcomePage::init() { //setup the url buttons setupButton( WelcomePage::Button::Support, m_conf->supportUrl() ); setupButton( WelcomePage::Button::KnownIssues, m_conf->knownIssuesUrl() ); setupButton( WelcomePage::Button::ReleaseNotes, m_conf->releaseNotesUrl() ); setupButton( WelcomePage::Button::Donate, m_conf->donateUrl() ); //language icon auto icon = Calamares::Branding::instance()->image( m_conf->languageIcon(), QSize( 48, 48 ) ); if ( !icon.isNull() ) { setLanguageIcon( icon ); } } void WelcomePage::initLanguages() { // Fill the list of translations ui->languageWidget->clear(); ui->languageWidget->setInsertPolicy( QComboBox::InsertAtBottom ); ui->languageWidget->setModel( m_conf->languagesModel() ); ui->languageWidget->setItemDelegate( new LocaleTwoColumnDelegate( ui->languageWidget ) ); ui->languageWidget->setCurrentIndex( m_conf->localeIndex() ); connect( ui->languageWidget, static_cast< void ( QComboBox::* )( int ) >( &QComboBox::currentIndexChanged ), m_conf, &Config::setLocaleIndex ); } void WelcomePage::setupButton( Button role, const QString& url ) { QPushButton* button = nullptr; CalamaresUtils::ImageType icon = CalamaresUtils::Information; switch ( role ) { case Button::Donate: button = ui->donateButton; icon = CalamaresUtils::Donate; break; case Button::KnownIssues: button = ui->knownIssuesButton; icon = CalamaresUtils::Bugs; break; case Button::ReleaseNotes: button = ui->releaseNotesButton; icon = CalamaresUtils::Release; break; case Button::Support: button = ui->supportButton; icon = CalamaresUtils::Help; break; } if ( !button ) { qWarning() << "Unknown button role" << smash( role ); return; } if ( url.isEmpty() ) { button->hide(); return; } QUrl u( url ); if ( u.isValid() ) { auto size = 2 * QSize( CalamaresUtils::defaultFontHeight(), CalamaresUtils::defaultFontHeight() ); button->setIcon( CalamaresUtils::defaultPixmap( icon, CalamaresUtils::Original, size ) ); connect( button, &QPushButton::clicked, [u]() { QDesktopServices::openUrl( u ); } ); } else { qWarning() << "Welcome button" << smash( role ) << "URL" << url << "is invalid."; button->hide(); } } void WelcomePage::focusInEvent( QFocusEvent* e ) { if ( ui->languageWidget ) { ui->languageWidget->setFocus(); } e->accept(); } bool WelcomePage::verdict() const { return m_checkingWidget->verdict(); } void WelcomePage::externallySelectedLanguage( int row ) { if ( ( row >= 0 ) && ( row < ui->languageWidget->count() ) ) { ui->languageWidget->setCurrentIndex( row ); } } void WelcomePage::setLanguageIcon( QPixmap i ) { ui->languageIcon->setPixmap( i ); } void WelcomePage::retranslate() { QString message; if ( Calamares::Settings::instance()->isSetupMode() ) { message = Calamares::Branding::instance()->welcomeStyleCalamares() ? 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.

" ); } ui->mainText->setText( message.arg( Calamares::Branding::instance()->versionedName() ) ); ui->retranslateUi( this ); ui->supportButton->setText( tr( "%1 support" ).arg( Calamares::Branding::instance()->shortProductName() ) ); } void WelcomePage::showAboutBox() { QString title = Calamares::Settings::instance()->isSetupMode() ? tr( "About %1 setup" ) : tr( "About %1 installer" ); QMessageBox mb( QMessageBox::Information, title.arg( CALAMARES_APPLICATION_NAME ), tr( "

%1


" "%2
" "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 " "translators team.

" "Calamares " "development is sponsored by
" "Blue Systems - " "Liberating Software." ) .arg( CALAMARES_APPLICATION_NAME ) .arg( CALAMARES_VERSION ) .arg( Calamares::Branding::instance()->versionedName() ), QMessageBox::Ok, this ); mb.setIconPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::Squid, CalamaresUtils::Original, QSize( CalamaresUtils::defaultFontHeight() * 6, CalamaresUtils::defaultFontHeight() * 6 ) ) ); QGridLayout* layout = reinterpret_cast< QGridLayout* >( mb.layout() ); if ( layout ) { layout->setColumnMinimumWidth( 2, CalamaresUtils::defaultFontHeight() * 24 ); } mb.exec(); } void LocaleTwoColumnDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const { QStyledItemDelegate::paint( painter, option, index ); option.widget->style()->drawItemText( painter, option.rect, Qt::AlignRight | Qt::AlignVCenter, option.palette, false, index.data( CalamaresUtils::Locale::LabelModel::EnglishLabelRole ).toString() ); } calamares-3.2.41.1/src/modules/welcome/WelcomePage.h000066400000000000000000000037051410275732300221340ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014 Teo Mrnjavac * SPDX-FileCopyrightText: 2019 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef WELCOMEPAGE_H #define WELCOMEPAGE_H #include "locale/LabelModel.h" #include #include namespace Ui { class WelcomePage; } class CheckerContainer; class Config; class WelcomePage : public QWidget { Q_OBJECT public: WelcomePage( Config* config, QWidget* parent = nullptr ); enum class Button { Support, Donate, KnownIssues, ReleaseNotes }; /// @brief Configure the button @p n, to open @p url void setupButton( Button b, const QString& url ); /// @brief Set international language-selector icon void setLanguageIcon( QPixmap ); /// @brief Results of requirements checking bool verdict() const; /// @brief Change the language from an external source. void externallySelectedLanguage( int row ); void init(); public slots: void retranslate(); void showAboutBox(); protected: void focusInEvent( QFocusEvent* e ) override; //choose the child widget to focus private: /// @brief Fill the list of languages with the available translations void initLanguages(); Ui::WelcomePage* ui; CheckerContainer* m_checkingWidget; CalamaresUtils::Locale::LabelModel* m_languages; Config* m_conf; }; /** @brief Delegate to display language information in two columns. * * Displays the native language name and the English language name. */ class LocaleTwoColumnDelegate : public QStyledItemDelegate { public: using QStyledItemDelegate::QStyledItemDelegate; void paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const override; }; #endif // WELCOMEPAGE_H calamares-3.2.41.1/src/modules/welcome/WelcomePage.ui000066400000000000000000000154451410275732300223260ustar00rootroot00000000000000 SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> SPDX-License-Identifier: GPL-3.0-or-later WelcomePage 0 0 593 400 Form Qt::Vertical QSizePolicy::Fixed 20 40 3 0 <Calamares welcome text> Qt::AlignCenter true Qt::Horizontal QSizePolicy::Maximum 40 20 Select application and system language :/welcome/language-icon-48px.png 2 0 Select application and system language Qt::Horizontal QSizePolicy::Maximum 40 20 Qt::Horizontal 40 20 &About true Open donations website &Donate true Open help and support website &Support true Open issues and bug-tracking website &Known issues true Open release notes website &Release notes true Qt::Horizontal 40 20 Qt::Vertical QSizePolicy::Fixed 20 20 calamares-3.2.41.1/src/modules/welcome/WelcomeViewStep.cpp000066400000000000000000000047651410275732300233700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "WelcomeViewStep.h" #include "Config.h" #include "WelcomePage.h" #include "checker/GeneralRequirements.h" #include "Branding.h" #include "modulesystem/ModuleManager.h" #include "utils/Logger.h" #include "utils/Variant.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeViewStepFactory, registerPlugin< WelcomeViewStep >(); ) WelcomeViewStep::WelcomeViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_conf( new Config( this ) ) , m_widget( new WelcomePage( m_conf ) ) , m_requirementsChecker( new GeneralRequirements( this ) ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, this, &WelcomeViewStep::nextStatusChanged ); connect( m_conf, &Config::localeIndexChanged, m_widget, &WelcomePage::externallySelectedLanguage ); } WelcomeViewStep::~WelcomeViewStep() { if ( m_widget && m_widget->parent() == nullptr ) { m_widget->deleteLater(); } } QString WelcomeViewStep::prettyName() const { return tr( "Welcome" ); } QWidget* WelcomeViewStep::widget() { return m_widget; } bool WelcomeViewStep::isNextEnabled() const { return m_widget->verdict(); } bool WelcomeViewStep::isBackEnabled() const { return false; } bool WelcomeViewStep::isAtBeginning() const { return true; } bool WelcomeViewStep::isAtEnd() const { return true; } Calamares::JobList WelcomeViewStep::jobs() const { return Calamares::JobList(); } void WelcomeViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_conf->setConfigurationMap( 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."; } //here init the qml or qwidgets needed bits m_widget->init(); } Calamares::RequirementsList WelcomeViewStep::checkRequirements() { return m_requirementsChecker->checkRequirements(); } calamares-3.2.41.1/src/modules/welcome/WelcomeViewStep.h000066400000000000000000000034021410275732300230200ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef WELCOMEVIEWSTEP_H #define WELCOMEVIEWSTEP_H #include "DllMacro.h" #include "modulesystem/Requirement.h" #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" #include #include class WelcomePage; class GeneralRequirements; class Config; namespace CalamaresUtils { namespace GeoIP { class Handler; } } // namespace CalamaresUtils class PLUGINDLLEXPORT WelcomeViewStep : public Calamares::ViewStep { Q_OBJECT public: explicit WelcomeViewStep( QObject* parent = nullptr ); ~WelcomeViewStep() override; QString prettyName() const override; QWidget* widget() override; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Sets the country that Calamares is running in. * * This (ideally) sets up language and locale settings that are right for * the given 2-letter country code. Uses the handler's information (if * given) for error reporting. */ void setCountry( const QString&, CalamaresUtils::GeoIP::Handler* handler ); Calamares::RequirementsList checkRequirements() override; private: Config* m_conf; WelcomePage* m_widget; GeneralRequirements* m_requirementsChecker; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeViewStepFactory ) #endif // WELCOMEVIEWSTEP_H calamares-3.2.41.1/src/modules/welcome/checker/000077500000000000000000000000001410275732300211725ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/welcome/checker/CheckerContainer.cpp000066400000000000000000000050171410275732300251100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ /* Based on code extracted from RequirementsChecker.cpp */ #include "CheckerContainer.h" #include "ResultsListWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "widgets/WaitingWidget.h" #include CheckerContainer::CheckerContainer( Config* config, QWidget* parent ) : QWidget( parent ) , m_waitingWidget( new WaitingWidget( QString(), this ) ) , m_checkerWidget( nullptr ) , m_verdict( false ) , 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..." ) ); ); } CheckerContainer::~CheckerContainer() { delete m_waitingWidget; delete m_checkerWidget; } 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 ); cDebug() << Logger::SubEntry << i << model.data( index, Calamares::RequirementsModel::Name ).toString() << "set?" << model.data( index, Calamares::RequirementsModel::Satisfied ).toBool() << "req?" << model.data( index, Calamares::RequirementsModel::Mandatory ).toBool(); } } layout()->removeWidget( m_waitingWidget ); m_waitingWidget->deleteLater(); m_waitingWidget = nullptr; // Don't delete in destructor m_checkerWidget = new ResultsListWidget( m_config, this ); m_checkerWidget->setObjectName( "requirementsChecker" ); layout()->addWidget( m_checkerWidget ); m_verdict = ok; } void CheckerContainer::requirementsProgress( const QString& message ) { if ( m_waitingWidget ) { m_waitingWidget->setText( message ); } } bool CheckerContainer::verdict() const { return m_verdict; } calamares-3.2.41.1/src/modules/welcome/checker/CheckerContainer.h000066400000000000000000000026061410275732300245560ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ /* Based on code extracted from RequirementsChecker.cpp */ #ifndef CHECKERCONTAINER_H #define CHECKERCONTAINER_H #include "Config.h" #include class ResultsListWidget; class WaitingWidget; /** * A widget that collects requirements results; until the results are * all in, displays a spinner / waiting widget. Then it switches to * a (list) diplay of the results, plus some explanation of the * overall state of the entire list of results. */ class CheckerContainer : public QWidget { Q_OBJECT public: explicit CheckerContainer( Config* config, QWidget* parent = nullptr ); ~CheckerContainer() override; bool verdict() const; public slots: /** @brief All the requirements are complete, switch to list view */ void requirementsComplete( bool ); void requirementsProgress( const QString& message ); protected: WaitingWidget* m_waitingWidget; ResultsListWidget* m_checkerWidget; bool m_verdict; private: Config* m_config = nullptr; }; #endif calamares-3.2.41.1/src/modules/welcome/checker/GeneralRequirements.cpp000066400000000000000000000336611410275732300256700ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #include "GeneralRequirements.h" #include "CheckerContainer.h" #include "partman_devices.h" #include "Settings.h" #include "modulesystem/Requirement.h" #include "network/Manager.h" #include "utils/CalamaresUtilsGui.h" #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "utils/Units.h" #include "utils/Variant.h" #include "widgets/WaitingWidget.h" #include "GlobalStorage.h" #include "JobQueue.h" #include #include #include #include #include #include #include #include //geteuid GeneralRequirements::GeneralRequirements( QObject* parent ) : QObject( parent ) , m_requiredStorageGiB( -1 ) , m_requiredRamGiB( -1 ) { } static QSize biggestSingleScreen() { QSize s; for ( const auto* screen : QGuiApplication::screens() ) { QSize thisScreen = screen->availableSize(); if ( !s.isValid() || ( s.width() * s.height() < thisScreen.width() * thisScreen.height() ) ) { s = thisScreen; } } 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(); 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 ); if ( m_entriesToCheck.contains( "storage" ) ) { enoughStorage = checkEnoughStorage( requiredStorageB ); } qint64 requiredRamB = CalamaresUtils::GiBtoBytes( m_requiredRamGiB ); if ( m_entriesToCheck.contains( "ram" ) ) { enoughRam = checkEnoughRam( requiredRamB ); } if ( m_entriesToCheck.contains( "power" ) ) { hasPower = checkHasPower(); } if ( m_entriesToCheck.contains( "internet" ) ) { hasInternet = checkHasInternet(); } if ( m_entriesToCheck.contains( "root" ) ) { isRoot = checkIsRoot(); } 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 ) { if ( entry == "storage" ) { 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 ); }, enoughStorage, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "ram" ) { checkEntries.append( { entry, [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 ); }, enoughRam, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "power" ) { checkEntries.append( { entry, [] { return tr( "is plugged in to a power source" ); }, [] { return tr( "The system is not plugged in to a power source." ); }, hasPower, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "internet" ) { checkEntries.append( { entry, [] { return tr( "is connected to the Internet" ); }, [] { return tr( "The system is not connected to the Internet." ); }, hasInternet, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "root" ) { 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." ); }, isRoot, m_entriesToRequire.contains( entry ) } ); } else if ( entry == "screen" ) { 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." ); }, enoughScreen, false } ); } } return checkEntries; } void GeneralRequirements::setConfigurationMap( const QVariantMap& configurationMap ) { bool incompleteConfiguration = false; if ( configurationMap.contains( "check" ) && configurationMap.value( "check" ).type() == QVariant::List ) { m_entriesToCheck.clear(); m_entriesToCheck.append( configurationMap.value( "check" ).toStringList() ); } else { cWarning() << "GeneralRequirements entry 'check' is incomplete."; incompleteConfiguration = true; } if ( configurationMap.contains( "required" ) && configurationMap.value( "required" ).type() == QVariant::List ) { m_entriesToRequire.clear(); m_entriesToRequire.append( configurationMap.value( "required" ).toStringList() ); } else { cWarning() << "GeneralRequirements entry 'required' is incomplete."; incompleteConfiguration = true; } #ifdef WITHOUT_LIBPARTED if ( m_entriesToCheck.contains( "storage" ) || m_entriesToRequire.contains( "storage" ) ) { // Warn, but also drop the required bit because otherwise installation // will be impossible (because the check always returns false). cWarning() << "GeneralRequirements checks 'storage' but libparted is disabled."; m_entriesToCheck.removeAll( "storage" ); m_entriesToRequire.removeAll( "storage" ); } #endif // Help out with consistency, but don't fix for ( const auto& r : m_entriesToRequire ) if ( !m_entriesToCheck.contains( r ) ) { cWarning() << "GeneralRequirements requires" << r << "but does not check it."; } if ( configurationMap.contains( "requiredStorage" ) && ( configurationMap.value( "requiredStorage" ).type() == QVariant::Double || configurationMap.value( "requiredStorage" ).type() == QVariant::LongLong ) ) { bool ok = false; m_requiredStorageGiB = configurationMap.value( "requiredStorage" ).toDouble( &ok ); if ( !ok ) { cWarning() << "GeneralRequirements entry 'requiredStorage' is invalid."; m_requiredStorageGiB = 3.; } Calamares::JobQueue::instance()->globalStorage()->insert( "requiredStorageGiB", m_requiredStorageGiB ); } else { cWarning() << "GeneralRequirements entry 'requiredStorage' is missing."; m_requiredStorageGiB = 3.; incompleteConfiguration = true; } if ( configurationMap.contains( "requiredRam" ) && ( configurationMap.value( "requiredRam" ).type() == QVariant::Double || configurationMap.value( "requiredRam" ).type() == QVariant::LongLong ) ) { bool ok = false; m_requiredRamGiB = configurationMap.value( "requiredRam" ).toDouble( &ok ); if ( !ok ) { cWarning() << "GeneralRequirements entry 'requiredRam' is invalid."; m_requiredRamGiB = 1.; incompleteConfiguration = true; } } else { cWarning() << "GeneralRequirements entry 'requiredRam' is missing."; m_requiredRamGiB = 1.; 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 ); } if ( incompleteConfiguration ) { cWarning() << "GeneralRequirements configuration map:" << Logger::DebugMap( configurationMap ); } } bool GeneralRequirements::checkEnoughStorage( qint64 requiredSpace ) { #ifdef WITHOUT_LIBPARTED Q_UNUSED( requiredSpace ) cWarning() << "GeneralRequirements is configured without libparted."; return false; #else return check_big_enough( requiredSpace ); #endif } bool 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 double( availableRam ) >= double( requiredRam ) * 0.95; // cast to silence 64-bit-int conversion to double } bool GeneralRequirements::checkBatteryExists() { const QFileInfo basePath( "/sys/class/power_supply" ); if ( !( basePath.exists() && basePath.isDir() ) ) { return false; } QDir baseDir( basePath.absoluteFilePath() ); const auto entries = baseDir.entryList( QDir::AllDirs | QDir::Readable | QDir::NoDotAndDotDot ); for ( const auto& item : entries ) { QFileInfo typePath( baseDir.absoluteFilePath( QString( "%1/type" ).arg( item ) ) ); QFile typeFile( typePath.absoluteFilePath() ); if ( typeFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { if ( typeFile.readAll().startsWith( "Battery" ) ) { return true; } } } return false; } bool GeneralRequirements::checkHasPower() { const QString UPOWER_SVC_NAME( "org.freedesktop.UPower" ); const QString UPOWER_INTF_NAME( "org.freedesktop.UPower" ); const QString UPOWER_PATH( "/org/freedesktop/UPower" ); if ( !checkBatteryExists() ) { return true; } cDebug() << "A battery exists, checking for mains power."; QDBusInterface upowerIntf( UPOWER_SVC_NAME, UPOWER_PATH, UPOWER_INTF_NAME, QDBusConnection::systemBus() ); bool onBattery = upowerIntf.property( "OnBattery" ).toBool(); if ( !upowerIntf.isValid() ) { // We can't talk to upower but we're obviously up and running // so I guess we got that going for us, which is nice... return true; } // If a battery exists but we're not using it, means we got mains // power. return !onBattery; } bool GeneralRequirements::checkHasInternet() { auto& nam = CalamaresUtils::Network::Manager::instance(); bool hasInternet = nam.checkHasInternet(); Calamares::JobQueue::instance()->globalStorage()->insert( "hasInternet", hasInternet ); return hasInternet; } bool GeneralRequirements::checkIsRoot() { return !geteuid(); } calamares-3.2.41.1/src/modules/welcome/checker/GeneralRequirements.h000066400000000000000000000021311410275732300253210ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2017 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef GENERALREQUIREMENTS_H #define GENERALREQUIREMENTS_H #include #include #include "modulesystem/Requirement.h" class GeneralRequirements : public QObject { Q_OBJECT public: explicit GeneralRequirements( QObject* parent = nullptr ); void setConfigurationMap( const QVariantMap& configurationMap ); Calamares::RequirementsList checkRequirements(); private: QStringList m_entriesToCheck; QStringList m_entriesToRequire; bool checkEnoughStorage( qint64 requiredSpace ); bool checkEnoughRam( qint64 requiredRam ); bool checkBatteryExists(); bool checkHasPower(); bool checkHasInternet(); bool checkIsRoot(); qreal m_requiredStorageGiB; qreal m_requiredRamGiB; }; #endif // REQUIREMENTSCHECKER_H calamares-3.2.41.1/src/modules/welcome/checker/ResultWidget.cpp000066400000000000000000000031351410275732300243220ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ResultWidget.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include static inline void setCondition( QLabel* label, CalamaresUtils::ImageType t ) { label->setPixmap( CalamaresUtils::defaultPixmap( t, CalamaresUtils::Original, QSize( label->height(), label->height() ) ) ); } ResultWidget::ResultWidget( bool satisfied, bool required, QWidget* parent ) : QWidget( parent ) { QBoxLayout* mainLayout = new QHBoxLayout; setLayout( mainLayout ); m_iconLabel = new QLabel( this ); m_iconLabel->setFixedSize( CalamaresUtils::defaultIconSize() ); m_iconLabel->setObjectName( "resultIcon" ); mainLayout->addWidget( m_iconLabel ); m_textLabel = new QLabel( this ); 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 ); } } void ResultWidget::setText( const QString& text ) { m_textLabel->setText( text ); } calamares-3.2.41.1/src/modules/welcome/checker/ResultWidget.h000066400000000000000000000021231410275732300237630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef CHECKER_RESULTWIDGET_H #define CHECKER_RESULTWIDGET_H #include /** * @brief Displays the results of a single check. * * Widget to insert into a ResultListWidget to display an iconic status * (warning or failure when the check is not satisfied) along with * descriptive test. */ class ResultWidget : public QWidget { Q_OBJECT public: /** * @brief Create widget with results of a check. * * Use setText() to set up the text of the widget. */ 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 calamares-3.2.41.1/src/modules/welcome/checker/ResultsListWidget.cpp000066400000000000000000000211131410275732300253350ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2014-2015 Teo Mrnjavac * SPDX-FileCopyrightText: 2017 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #include "ResultsListWidget.h" #include "ResultWidget.h" #include "Branding.h" #include "Settings.h" #include "utils/CalamaresUtilsGui.h" #include "utils/Logger.h" #include "utils/Retranslator.h" #include "widgets/FixedAspectRatioLabel.h" #include #include #include #include #include /** @brief Add widgets to @p layout for the list @p checkEntries * * The @p resultWidgets is filled with pointers to the widgets; * for each entry in @p checkEntries that satisfies @p predicate, * a widget is created, otherwise a nullptr is added instead. * * Adds all the widgets to the given @p layout. * * Afterwards, @p resultWidgets has a length equal to @p checkEntries. */ static void createResultWidgets( QLayout* layout, QList< ResultWidget* >& resultWidgets, 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& index = model.index( i ); if ( !predicate( model, index ) ) { resultWidgets.append( nullptr ); continue; } 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 = ( is_satisfied ) ? bgColor.hue() : ( is_mandatory ) ? 0 : 60; bgColor.setHsv( bgHue, 64, bgColor.value() ); pal.setColor( QPalette::Window, bgColor ); ciw->setPalette( pal ); resultWidgets.append( ciw ); } } /** @brief A "details" dialog for the results-list * * This displays the same RequirementsList as ResultsListWidget, * but the *details* part rather than the show description. * * This is an internal-to-the-widget class. */ class ResultsListDialog : public QDialog { Q_OBJECT public: /** @brief Create a dialog for the given @p checkEntries list of requirements. * * The list must continue to exist for the lifetime of the dialog, * or UB happens. */ ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent ); ~ResultsListDialog() override; private: QLabel* m_title; QList< ResultWidget* > m_resultWidgets; ///< One widget for each entry with details available const Calamares::RequirementsModel& m_model; void retranslate(); }; ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent ) : QDialog( parent ) , m_model( model ) { auto* mainLayout = new QVBoxLayout; auto* entriesLayout = new QVBoxLayout; m_title = new QLabel( this ); m_title->setObjectName( "resultDialogTitle" ); 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 ); mainLayout->addWidget( buttonBox ); setLayout( mainLayout ); connect( buttonBox, &QDialogButtonBox::clicked, this, &QDialog::close ); CALAMARES_RETRANSLATE_SLOT( &ResultsListDialog::retranslate ); } ResultsListDialog::~ResultsListDialog() {} void ResultsListDialog::retranslate() { m_title->setText( tr( "For best results, please ensure that this computer:" ) ); setWindowTitle( tr( "System requirements" ) ); for ( auto i = 0; i < m_model.count(); i++ ) { if ( m_resultWidgets[ i ] ) { m_resultWidgets[ i ]->setText( m_model.data( m_model.index( i ), Calamares::RequirementsModel::Details ).toString() ); } } } ResultsListWidget::ResultsListWidget( Config* config, QWidget* parent ) : QWidget( parent ) , m_config( config ) { setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); QBoxLayout* mainLayout = new QVBoxLayout; QBoxLayout* entriesLayout = new QVBoxLayout; setLayout( mainLayout ); int paddingSize = qBound( 32, CalamaresUtils::defaultFontHeight() * 4, 128 ); QHBoxLayout* spacerLayout = new QHBoxLayout; mainLayout->addLayout( spacerLayout ); spacerLayout->addSpacing( paddingSize ); spacerLayout->addLayout( entriesLayout ); spacerLayout->addSpacing( paddingSize ); CalamaresUtils::unmarginLayout( spacerLayout ); 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 = config->requirementsModel()->satisfiedRequirements(); auto isUnSatisfied = []( const Calamares::RequirementsModel& m, QModelIndex i ) { return !m.data( i, Calamares::RequirementsModel::Satisfied ).toBool(); }; createResultWidgets( entriesLayout, m_resultWidgets, *( config->requirementsModel() ), isUnSatisfied ); if ( !requirementsSatisfied ) { entriesLayout->insertSpacing( 1, CalamaresUtils::defaultFontHeight() / 2 ); mainLayout->addStretch(); } else { if ( !Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductWelcome ).isEmpty() ) { QPixmap theImage = QPixmap( Calamares::Branding::instance()->imagePath( Calamares::Branding::ProductWelcome ) ); if ( !theImage.isNull() ) { QLabel* imageLabel; if ( Calamares::Branding::instance()->welcomeExpandingLogo() ) { FixedAspectRatioLabel* p = new FixedAspectRatioLabel; p->setPixmap( theImage ); imageLabel = p; } else { imageLabel = new QLabel; imageLabel->setPixmap( theImage ); } imageLabel->setContentsMargins( 4, CalamaresUtils::defaultFontHeight() * 3 / 4, 4, 4 ); imageLabel->setAlignment( Qt::AlignCenter ); imageLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); imageLabel->setObjectName( "welcomeLogo" ); mainLayout->addWidget( imageLabel ); } } explanation->setAlignment( Qt::AlignCenter ); } CALAMARES_RETRANSLATE_SLOT( &ResultsListWidget::retranslate ); } void ResultsListWidget::linkClicked( const QString& link ) { if ( link == "#details" ) { auto* dialog = new ResultsListDialog( *( m_config->requirementsModel() ), this ); dialog->exec(); dialog->deleteLater(); } } void ResultsListWidget::retranslate() { const auto& model = *( m_config->requirementsModel() ); for ( auto i = 0; i < model.count(); i++ ) { if ( m_resultWidgets[ i ] ) { m_resultWidgets[ i ]->setText( model.data( model.index( i ), Calamares::RequirementsModel::NegatedText ).toString() ); } } } #include "utils/moc-warnings.h" #include "ResultsListWidget.moc" calamares-3.2.41.1/src/modules/welcome/checker/ResultsListWidget.h000066400000000000000000000016351410275732300250110ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ #ifndef CHECKER_RESULTSLISTWIDGET_H #define CHECKER_RESULTSLISTWIDGET_H #include "ResultWidget.h" #include "Config.h" #include class QLabel; class ResultsListWidget : public QWidget { Q_OBJECT public: explicit ResultsListWidget( Config* config, QWidget* parent ); private: /// @brief A link in the explanatory text has been clicked void linkClicked( const QString& link ); void retranslate(); QList< ResultWidget* > m_resultWidgets; ///< One widget for each unsatisfied entry Config* m_config = nullptr; }; #endif // CHECKER_RESULTSLISTWIDGET_H calamares-3.2.41.1/src/modules/welcome/checker/partman_devices.c000066400000000000000000000061221410275732300245030ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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: see the License-Identifier above. * */ /* This is third-party ancient C code. Don't format it. */ /* *INDENT-OFF* */ /* clang-format off */ #include "partman_devices.h" #include #include #include #include #include #include #ifdef __linux__ /* from */ #define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ #endif /* __linux__ */ #ifdef __FreeBSD_kernel__ #include #include #endif #include #if defined(__linux__) static int is_cdrom(const char *path) { int fd = -1; int ret = -1; fd = open(path, O_RDONLY | O_NONBLOCK); if (fd >= 0) { ret = ioctl(fd, CDROM_GET_CAPABILITY, NULL); close(fd); } if (ret >= 0) return 1; else return 0; } #elif defined(__FreeBSD_kernel__) /* !__linux__ */ static int is_cdrom(const char *path) { int fd; fd = open(path, O_RDONLY | O_NONBLOCK); ioctl(fd, CDIOCCAPABILITY, NULL); close(fd); if (errno != EBADF && errno != ENOTTY) return 1; else return 0; } #else /* !__linux__ && !__FreeBSD_kernel__ */ #define is_cdrom(path) 0 #endif #if defined(__linux__) static int is_floppy(const char *path) { return (strstr(path, "/dev/floppy") != NULL || strstr(path, "/dev/fd") != NULL); } #elif defined(__FreeBSD_kernel__) /* !__linux__ */ static int is_floppy(const char *path) { return (strstr(path, "/dev/fd") != NULL); } #else /* !__linux__ && !__FreeBSD_kernel__ */ #define is_floppy(path) 0 #endif static long long process_device(PedDevice *dev) { if (dev->read_only) return -1; if (is_cdrom(dev->path) || is_floppy(dev->path)) return -1; /* Exclude compcache (http://code.google.com/p/compcache/) */ if (strstr(dev->path, "/dev/ramzswap") != NULL || strstr(dev->path, "/dev/zram") != NULL) return -1; return dev->length * dev->sector_size; } int check_big_enough(long long required_space) { PedDevice *dev = NULL; ped_exception_fetch_all(); ped_device_probe_all(); bool big_enough = false; for (dev = NULL; NULL != (dev = ped_device_get_next(dev));) { long long dev_size = process_device(dev); if (dev_size >= required_space) { big_enough = true; break; } } // We would free the devices to release allocated memory, // but other modules might be using partman use well, // and they can hold pointers to libparted structures in // other threads. // // So prefer to leak memory, instead. // // ped_device_free_all(); return big_enough; } /* Local variables: indent-tabs-mode: nil c-file-style: "linux" c-font-lock-extra-types: ("Ped\\sw+") End: */ calamares-3.2.41.1/src/modules/welcome/checker/partman_devices.h000066400000000000000000000007351410275732300245140ustar00rootroot00000000000000/* === 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 PARTMAN_DEVICES_H #define PARTMAN_DEVICES_H #ifdef __cplusplus extern "C" { #endif int check_big_enough( long long required_space ); #ifdef __cplusplus } // extern "C" #endif #endif // PARTMAN_DEVICES_H calamares-3.2.41.1/src/modules/welcome/language-icon-128px.png000066400000000000000000000110321410275732300236620ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~tEXtCreation Time01/29/13?ptEXtSoftwareAdobe Fireworks CS5q6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphˎ0}rV, IUu"hv JxW뢏Wsm&(Q0>xK44(Kj]T1;%EӇz.>팺}^dMtNve]*VbzfB&7 j^G/x\p&Oe?ӠIF&_ɯblm-ko6k&0ܗ ExkeΫw":3dm+NƔ8/P=.YL]*h95*,&ǝFl2ga@*mۼߕT3M\^.@cM\*=hG28_[nz=̳K =<YYyٿ~AP( BP( BP( BP(tq~nVƚ]~LkD? g12 XsM&o!Ν!C(f e 'ihٰa>}Z(un_X6À?J&ۣ$==]N:%\ }j/Ǎ'򊔖t% Wx'B*ɖQF/,'N/}TO"XiHYz;vi+hSޞ` pN:tZJ9.+hxJ=[ t $+W"9] @[=``u}Ȓ%Kb6t_@5@; 1BXXf"))iӦo^@O`z<=?F, 44#FPRRg}˗IHH !!cb2u)Z 44Tϟ/vk׮INNNq###eժURXXFQtxbٷo) -"}ӧ$''K~~*run+Ї=zHbb|r%qY8ݝЇ ͛7)>ILLlذA~%;@>}dnq72?^֮]+_u]U}]xF@ygY+ bN7Z!/;Bd-"w}I?<87|@T9\C2:9_q>\C^P!_r"}h<7ؽ{w~aO%z"a?O$8(h6i),,ŋ䐜L~6!:cɒ%[omR3~iݻ7gf۶m?}Zܹs_ƍ%..NG3`pX,p׵V{Y>&000)S`6ی7a/YdDlv`21c^q| 0`mƙ0a,ϢE<%K|X\DDjkk%))ɪ 6z?~\UcƌХKgOK; ՝Ųi&ٶm=zTlƽvdee=#lڴnoP~&Mn$;;[?.ڵo!=z/␭k֬YTdرPVVt.22kuܹs ql®bqs P^^.7n'ȑ#6>~ձz \pAl"qqqVPyeMnv_h&NjoR^^nu|֬YJmaXT6l ӦM'RSSeRWW'ׯ_n֭[V{ڵN<)&IνJz~7))){O.]*#FhကܩW#P$s?\իJUUUÇ7ѺXt4kjj$44T[y"#GThJNu`vvvS#G:f{@;,^aaUe˖)詪 Yl<󒟟o䴤ӿsNǼUL6fzE}饗(qؾ}􊊊N4*^MM+eСH``8q¥t\@XXXVŋVq|Jj$0++~ 4Fk?[t}q޽{wQX>)jkMTWWWE v@lTГ.ɓ'8 [%%%E󥲲tr6̙3ʎSN)4_H@@{N;S }hyg+**HJJ 1j[TVVrQFp\zIMM%55h<3f`M b!%%b{1222:Zgu,66Эe 5kرcSLaǎvn_ٱ={cE ++W_}{wwn)^(ϩoXrss_fϞݮ=+EG͛'/a"BDD=C u=\ 0LDGG{V0mDr:w"BII 999|6tZqz=ڧ?DkpN%;No;<ҍz h_=;8 ;=3VF9@< \<7= f-ў%vx8ӿʗ gqfIZZZB`0Ȁ|^1t 8" lX DzPpNvng ˕;->й`6PV\iC I  @t'S;[ۀJ8]_w]ӁM@9QzjM]aY"4.Ø.[G.eKw/;Dsx0P:.ÁC+1<g8kL2&*o%ڠU{?ZQFw1$p@-w긄/f{|#|\C4GvUvuX yz{O/n[57G4ݷa7`y3Ϣ’"7;cOܼUh=cІpFa'@Kh>SJy^ ֊K$іw\ho* p!} E[ xN7-'C۫Іu}b@`60ZhoN=g9fBbn5-ch;͛%]zzxs<7-@)T{nLh dB{mu%A[} mJmTOP( BP( BP( B?XBIENDB`calamares-3.2.41.1/src/modules/welcome/language-icon-128px.png.license000066400000000000000000000002121410275732300253010ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/welcome/language-icon-48px.png000066400000000000000000000044131410275732300236100ustar00rootroot00000000000000PNG  IHDR00W pHYs  ~tEXtCreation Time01/29/13?ptEXtSoftwareAdobe Fireworks CS5q6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphˎ0}rV, IUu"hv JxW뢏Wsm&(Q0>xK44(Kj]T1;%EӇz.>팺}^dMtNve]*VbzfB&7 j^G/x\p&Oe?ӠIF&_ɯblm-ko6k&0ܗ ExkeΫw":3dm+NƔ8/P=.YL]*h95*,&ǝFl2ga@*mۼߕT3M\^.@cM\*=hG28_[nz=̳K =<e˖n.D""";X,SE֭['ǏGI4DӉd.nݒᄕNf0F>,7,^ʼn'x%vf 2w8F9X/^޽{ihhɓ'TWWrJӎa4ٳgp)޼yƍYpa"RAtttȊ+dӦM'HD"l޼YN>AJA1rmRWWSd% p87-%aHv6QEEUU9v'Nl6SZ8y$.6l/_`IuJ… X`>ϟ311n`0pQ?~̹sg͚5TTTĝivK Oʖ-[dΝc7oC`g9_iY 0틣M-gc{ ^JIENDB`calamares-3.2.41.1/src/modules/welcome/language-icon-48px.png.license000066400000000000000000000002121410275732300252220ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/welcome/welcome.conf000066400000000000000000000077661410275732300221100ustar00rootroot00000000000000# 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 # the show* variables. # # In addition to displaying the welcome page, this module # can check requirements for installation. --- # Display settings for various buttons on the welcome page. # 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. showSupportUrl: true showKnownIssuesUrl: true 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 # imposed by other modules in the system. 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 satisfy this requirement, yet have no space to install to. requiredStorage: 5.5 # Amount of available RAM, in GiB. Floating-point is allowed here. requiredRam: 1.0 # To check for internet connectivity, Calamares does a HTTP GET # on this URL; on success (e.g. HTTP code 200) internet is OK. # 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 # List conditions to check. Each listed condition will be # probed in some way, and yields true or false according to # the host system satisfying the condition. # # This sample file lists all the conditions that are known. check: - storage - ram - power - internet - root - screen # List conditions that **must** be satisfied (from the list # of conditions, above) for installation to proceed. # If any of these conditions are not met, the user cannot # continue past the welcome page. required: # - storage - ram # - root # GeoIP checking # # This can be used to pre-select a language based on the country # the user is currently in. It *assumes* that there's internet # connectivity, though. Configuration is like in the locale module, # but remember to use a URL that returns full data **and** to # use a selector that will pick the country, not the timezone. # # 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`, # 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" url: "https://geoip.kde.org/v1/ubiquity" # extended XML format selector: "CountryCode" # blank uses default, which is wrong # User interface # # The "select language" icon is an international standard, but it # might not theme very well with your desktop environment. # Fill in an icon name (following FreeDesktop standards) to # use that named icon instead of the usual one. # # Leave blank or unset to use the international standard. # # Known icons in this space are "set-language" and "config-language". # # languageIcon: set-language calamares-3.2.41.1/src/modules/welcome/welcome.qrc000066400000000000000000000002301410275732300217230ustar00rootroot00000000000000 language-icon-128px.png language-icon-48px.png calamares-3.2.41.1/src/modules/welcome/welcome.schema.yaml000066400000000000000000000031611410275732300233450ustar00rootroot00000000000000# 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 ] calamares-3.2.41.1/src/modules/welcomeq/000077500000000000000000000000001410275732300177475ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/welcomeq/CMakeLists.txt000066400000000000000000000024061410275732300225110ustar00rootroot00000000000000# === 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( ${_welcome} ) # DUPLICATED WITH WELCOME MODULE find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED DBus Network ) find_package( LIBPARTED ) if ( LIBPARTED_FOUND ) set( PARTMAN_SRC ${_welcome}/checker/partman_devices.c ) set( CHECKER_LINK_LIBRARIES ${LIBPARTED_LIBRARY} ) else() set( PARTMAN_SRC ) set( CHECKER_LINK_LIBRARIES ) add_definitions( -DWITHOUT_LIBPARTED ) endif() set( CHECKER_SOURCES ${_welcome}/checker/GeneralRequirements.cpp ${PARTMAN_SRC} ) calamares_add_plugin( welcomeq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ${CHECKER_SOURCES} WelcomeQmlViewStep.cpp ${_welcome}/Config.cpp RESOURCES welcomeq.qrc LINK_PRIVATE_LIBRARIES ${CHECKER_LINK_LIBRARIES} Qt5::DBus Qt5::Network SHARED_LIB ) calamares-3.2.41.1/src/modules/welcomeq/Recommended.qml000066400000000000000000000053621410275732300227120ustar00rootroot00000000000000/* === 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 } } } calamares-3.2.41.1/src/modules/welcomeq/Requirements.qml000066400000000000000000000071441410275732300231530ustar00rootroot00000000000000/* === 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 } } } calamares-3.2.41.1/src/modules/welcomeq/WelcomeQmlViewStep.cpp000066400000000000000000000051321410275732300242100ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 "WelcomeQmlViewStep.h" #include "checker/GeneralRequirements.h" #include "locale/LabelModel.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/Variant.h" #include "Branding.h" #include "modulesystem/ModuleManager.h" #include "utils/Yaml.h" CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeQmlViewStepFactory, registerPlugin< WelcomeQmlViewStep >(); ) WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent ) : Calamares::QmlViewStep( parent ) , m_config( new Config( this ) ) , m_requirementsChecker( new GeneralRequirements( this ) ) { connect( Calamares::ModuleManager::instance(), &Calamares::ModuleManager::requirementsComplete, this, &WelcomeQmlViewStep::nextStatusChanged ); } QString WelcomeQmlViewStep::prettyName() const { return tr( "Welcome" ); } bool WelcomeQmlViewStep::isNextEnabled() const { 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; } bool WelcomeQmlViewStep::isAtBeginning() const { // TODO: adjust to "pages" in the QML return true; } bool WelcomeQmlViewStep::isAtEnd() const { // TODO: adjust to "pages" in the QML return true; } Calamares::JobList WelcomeQmlViewStep::jobs() const { return Calamares::JobList(); } void WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { m_config->setConfigurationMap( 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 welcomeq " "module configuration."; } Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last setContextProperty( "Welcome", m_config ); } Calamares::RequirementsList WelcomeQmlViewStep::checkRequirements() { return m_requirementsChecker->checkRequirements(); } QObject* WelcomeQmlViewStep::getConfig() { return m_config; } calamares-3.2.41.1/src/modules/welcomeq/WelcomeQmlViewStep.h000066400000000000000000000035271410275732300236630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2019-2020 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ #ifndef WELCOME_QMLVIEWSTEP_H #define WELCOME_QMLVIEWSTEP_H #include "Config.h" #include "modulesystem/Requirement.h" #include "utils/PluginFactory.h" #include "viewpages/QmlViewStep.h" #include #include #include namespace CalamaresUtils { namespace GeoIP { 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; bool isNextEnabled() const override; bool isBackEnabled() const override; bool isAtBeginning() const override; bool isAtEnd() const override; Calamares::JobList jobs() const override; void setConfigurationMap( const QVariantMap& configurationMap ) override; /** @brief Sets the country that Calamares is running in. * * This (ideally) sets up language and locale settings that are right for * the given 2-letter country code. Uses the handler's information (if * given) for error reporting. */ void setCountry( const QString&, CalamaresUtils::GeoIP::Handler* handler ); Calamares::RequirementsList checkRequirements() override; QObject* getConfig() override; private: Config* m_config; GeneralRequirements* m_requirementsChecker; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( WelcomeQmlViewStepFactory ) #endif // WELCOME_QMLVIEWSTEP_H calamares-3.2.41.1/src/modules/welcomeq/about.qml000066400000000000000000000063301410275732300215760ustar00rootroot00000000000000/* === 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.0 import QtQuick.Layouts 1.3 Item { width: parent.width height: parent.height focus: true property var appName: "Calamares" property var appVersion: "3.2.24" Rectangle { id: textArea x: 28 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 anchors.centerIn: parent text: qsTr("

%1


%2
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 translators team.

Calamares development is sponsored by
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 wrapMode: Text.WordWrap } Image { id: image x: 8 y: 12 height: 100 fillMode: Image.PreserveAspectFit source: "img/squid.png" } } } 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 } } } } calamares-3.2.41.1/src/modules/welcomeq/img/000077500000000000000000000000001410275732300205235ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/welcomeq/img/chevron-left-solid.svg000066400000000000000000000007421410275732300247530ustar00rootroot00000000000000calamares-3.2.41.1/src/modules/welcomeq/img/chevron-left-solid.svg.license000066400000000000000000000001401410275732300263640ustar00rootroot00000000000000SPDX-FileCopyrightText: 2020 demmm SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/welcomeq/img/language-icon-48px.png000066400000000000000000000044131410275732300245450ustar00rootroot00000000000000PNG  IHDR00W pHYs  ~tEXtCreation Time01/29/13?ptEXtSoftwareAdobe Fireworks CS5q6iTXtXML:com.adobe.xmpUTF-8XML:com.adobe.xmphˎ0}rV, IUu"hv JxW뢏Wsm&(Q0>xK44(Kj]T1;%EӇz.>팺}^dMtNve]*VbzfB&7 j^G/x\p&Oe?ӠIF&_ɯblm-ko6k&0ܗ ExkeΫw":3dm+NƔ8/P=.YL]*h95*,&ǝFl2ga@*mۼߕT3M\^.@cM\*=hG28_[nz=̳K =<e˖n.D""";X,SE֭['ǏGI4DӉd.nݒᄕNf0F>,7,^ʼn'x%vf 2w8F9X/^޽{ihhɓ'TWWrJӎa4ٳgp)޼yƍYpa"RAtttȊ+dӦM'HD"l޼YN>AJA1rmRWWSd% p87-%aHv6QEEUU9v'Nl6SZ8y$.6l/_`IuJ… X`>ϟ311n`0pQ?~̹sg͚5TTTĝivK Oʖ-[dΝc7oC`g9_iY 0틣M-gc{ ^JIENDB`calamares-3.2.41.1/src/modules/welcomeq/img/language-icon-48px.png.license000066400000000000000000000002121410275732300261570ustar00rootroot00000000000000SPDX-FileCopyrightText: 2011 Farhat Datta and Onur Mustak Cobanli, http://www.languageicon.org/ SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/welcomeq/img/squid.png000066400000000000000000000201711410275732300223570ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsXXm7tEXtSoftwarewww.inkscape.org<IDATxy%U}ǿofce`d (}IԲRV*eECXFMRTʊAB2RRj, 00lo7ݵo}Ͻ޿xs{Yix#q["4n>|/(A B@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20da"ÐD! C@ 2 Ad20Z ghu]}fzрJD2 PX>&']}fq1T*"PdP0Q2`A'H3d7e54BW]%H!tE`R]M.IHt% WXougR]EGM X D/ H>t/ H6t刎p?` $jĒ$,, $b;;`L q"0֠d0,^GAC@xyo|599 L "h#~cQ2h  KwUdaC@'oA&.d;_P+(€ phsxu-K%~FɊ5> dgmSsQcI&-~0f[eZ'(d!RX>6 Qc7jɧl02(lڅwڲ5fl}0Ŀ!7 sleGRL Bi6gPGWiI00/F&뎇0ҖdC0n$ Rmd6ȇL_I20/MdA_Sa.݁JӄD@7@L/@6@H? ~AA&+d>2r%7cgtŠ@os-@o~|ٗF@V z_y}9{7d]C3S|7Uw __{RW 2@ǐ@L )g: bIH,: @nfdKC0I5o1 :@I5O7NUD+d!4p}Pb ;d!4ڇI@ d!$HdD@L *ˏk.BTl"" &݊`A;J DIMUZ$.Sk!"e22 HAFCD#2wSbO{݁ Ą@3Ռ@ dE"an6%bF\LiƳet2V}}5r<ʮ?XۛԁA@LkESUuP{|0E?QT `d1'&t nd i& ld !)&6 tP5:80a$@Z/32WHE>iHL +J\L+&4 j)12 t-)~׊:g%h)p™z[UFOqz/j%Vb2aG$~H_f @JHh_O MW h42m t2&bw$Hr>uA!H)~@'oHh9n^2= 12ӯ !~7"\c,~ALRNc^v<>@h1ƴXt $M"/ cdSHk "( ܊b@X ~?@7g41,~IAAPA@i2/?S^ݎA) /<2_CZ7? qT!Q? 2yHG$#420Ry22&êdXy;@@4Sy*?hM hASќ&m ~>q@ͻB@2`TPaR?.~!}( L}yڞw|Q2-{˧jdĒ( v1ot[#h axGoOgW2c!wM'TN6 (Ǔ{*OejdD0C@L||,T9-ĿDzP9kMGy-hCo )KcBI6^YB@BAj)%4G]C]7 /53+GNjqٶB{)P@NNmʫsGeH )y+( DSiB/"vD2${:,T ( AmT|  BALyR(n_  3g<7 Y} a- E0r(m'lʃ`.V6ݖG^ +dDd0yP| <' 9;S<'{B@Ć bA("eaؑSZH@@Ē%Bs؉ɩEy8yԡuԪVxQ|s Er>X CEhjW'6;w:+Ckk/{KlqK=1V>(fbN r97c&椈  1s CQ7Uze aJ$~Wٹ@=9k€ř6žBu+-"<\mQſƠj ݷ}{?ݦ-1%%TEM1pywW/@t#^B~|+sBQ[MېHM @N^=oDUU'پ ^l޻IOH w~Ga nxd ) 9aH]) |aX/ҷ[ @d 0ŗ@.= 1엡.I@X(Ca u;|݁A]h22 ,I"N~ `q88ثOzl5Z 0 V.|q7Id0pd/kOS @i@~X|`֫uD]1߻t]'p7pqETJEh|q,uaF V^`Wl. Tt07;?DZs)ظi3v^x!6nI#O= >3b[`K  ~@tYFkoV@/ _y ~u V\kk׭tJ`?lw` w|oR~ʏ}|Wnoۙ~/xXWw`a;kC)H>Þ~@0&o<)ʗ|~`j`;o@y> YG W]7߂!aؙSAP{P>񯀒g?6}a-;>90 ?^ \#&&=OӀ'-@#}?4k{<c9ÿE(p̙@ϣvG 9Uh߿l@Bzam2Fz~ B=o^-߁Y[B=oT?L֪8y8ݱ#hKQ~O)R|bcP篁rw W:ǎF_LMNb޽So?.CP+;¨Cy˨Uѕ!ShhI.fg#+Cpn_ HLOM(?Nw{ ? ^OkbKN9t &'0 _ЧG0C8=s&M@Q3m<`3rxcvncH033}?u3ǾY?D]ԣԊ8am y -/_ٱ`}='67ڬj$dri}PpDrX[=yVNR%Ǐ;k`ꈟ b26hL8GZhZf,Ԭ]̎Hcl]7;/ 槁'E"G:npj#ZOx-*T+~PVQ(( e?.roFDKU1/T.M~osr2#c(Λo/j|%c{ Ԭ[|ˋH8*ȹ9mppԪryef}0֞cnDΟ{Se2epsv ˑ t+;Px9Ldյv$~ZFc]( Z<}6`aƖGi娏0_*Zk9R1'eӍ'`ǻ+4Ù Wl|~ bVE0*vv`a 8z4bج[\1]A!&Ø+0CVc5cD#Әp4Z4bƭ|ď8)9W+(wdv}ܮg#!Ua cgjs1j}.֫5^&)rfͩ?Ԯdl[g2"~R)v݁|>su1##زm' Ӡ_i -Fn~lxbx 08p[G!ڏ1ULIyQ|wFUzJ믴5hձ]?aGTQ7m}\sWhhŗ\)?j?cΐ+>JvqKrN8anV}9sGNp~g<ʍ_x'L5(֝]GQ"M uipJ7h742K/"zmb8s~ĐLA;#[X^;>a*v藍)g #+Qy_o]qVϰRg.GREĪի#9i-x@+ >S7 D&ⷿvߋ҆qOOY T1z;122ykそCTƪs B0 8qwP]c6<޽s`/o!(ӯ~.:n;p t'U} n9l\y58'AHӷ~G'0_cp+{OlvhhIP`ϻ8Dc)ۍ7 ^vS߮;fj>;.~Mtz7b>(,^)u!N͞LAmuX(0tr?| ? \tE\ b?R.~ 0p ,:K QpS`z(JlLM oZöW\C34S&Q<7F 4q,{N L.~aDşb10ROFE9W/kL"</:Jc`ظi3v+W KBjk5LNM¨ȕ0#>/B{;i}hJk.BqeX{V9fgP00}c>Sc`0WU7b,n5Z(:BƍW7(jUWc݆ غu;C]a{ Ph8IAUcQ^YfwMDh#~K}UNkӸ)~33(U;sj4< UoDk3%~}-9(~R ~7P*QQ.*\cc@uLMM¨s0ƭ&$`Q{sٹYTJe;ZUN=A|IuGNXr%8`62!hnKĒ\fQH!> "LCj"7I%Ki5+ V` X>19̢T.YmFʭ1p3~8%~>96wo&.iR&wiX|9fffNŝ7EҝRoS58}y";)ݼa5I' `T*Q~_ܭa7C07dԑ}`% Փr3.iR&R-apGV+3ۛM'ҭg$~qgcY8'kȏ5˅ 6ar||;r K)wjZO \SN@zNSr9LL,nPp~6c㤈@ɚ~'/:66AC븳VhON]ӤzMz='w5aٲeӉ4oȨ!jwC)\>0RZ*?nRh@./S\.B0@B}T0`%cW.r4V9-Q\ sLIT@FQU yįyh O w\` &pF&=f9hsg.C_z]^9L0ỉ0z(v0;9hǦ'.AA@ 2 Ad20daok\IENDB`calamares-3.2.41.1/src/modules/welcomeq/img/squid.png.license000066400000000000000000000001421410275732300237740ustar00rootroot00000000000000SPDX-FileCopyrightText: 2014 Teo Mrnjavac SPDX-License-Identifier: GPL-3.0-or-later calamares-3.2.41.1/src/modules/welcomeq/release_notes.qml000066400000000000000000000043621410275732300233170ustar00rootroot00000000000000/* === 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 } } } calamares-3.2.41.1/src/modules/welcomeq/welcomeq.conf000066400000000000000000000020341410275732300224310ustar00rootroot00000000000000# SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # # 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: use QRC, branding, or both sources of files qmlSearch: both # Everythin below here is documented in `welcome.conf` showSupportUrl: true showKnownIssuesUrl: true showReleaseNotesUrl: true # 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 calamares-3.2.41.1/src/modules/welcomeq/welcomeq.qml000066400000000000000000000146151410275732300223050ustar00rootroot00000000000000/* === 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 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 import QtQuick.Window 2.3 Page { id: welcome header: Item { width: parent.width height: parent.height 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

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 { id: welcomeImage anchors.centerIn: parent // imagePath() returns a full pathname, so make it refer to the filesystem // .. otherwise the path is interpreted relative to the "call site", which // .. might be the QRC file. source: "file:/" + Branding.imagePath(Branding.ProductWelcome) sourceSize.width: width sourceSize.height: height fillMode: Image.PreserveAspectFit } Requirements { visible: !config.requirementsModel.satisfiedRequirements } RowLayout { id: buttonBar width: parent.width / 1.5 height: 64 anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter spacing: Kirigami.Units.largeSpacing* 2 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: true onClicked: { //onClicked: load.source = "file:/usr/share/calamares/branding/default/show.qml" onClicked: load.source = "about.qml" } } Button { Layout.fillWidth: true text: qsTr("Support") icon.name: "system-help" 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: config.supportUrl !== "" onClicked: Qt.openUrlExternally(config.supportUrl) } Button { Layout.fillWidth: true text: qsTr("Known issues") icon.name: "tools-report-bug" 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: config.knownIssuesUrl !== "" onClicked: Qt.openUrlExternally(config.knownIssuesUrl) } Button { Layout.fillWidth: true text: qsTr("Release notes") icon.name: "folder-text" 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: config.releaseNotesUrl !== "" onClicked: load.source = "release_notes.qml" //onClicked: load.source = "file:/usr/share/calamares/release_notes.qml" } Button { Layout.fillWidth: true text: qsTr("Donate") icon.name: "taxes-finances" 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: config.donateUrl !== "" onClicked: Qt.openUrlExternally(config.donateUrl) } } 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 } } } calamares-3.2.41.1/src/modules/welcomeq/welcomeq.qrc000066400000000000000000000006721410275732300222770ustar00rootroot00000000000000 welcomeq.qml about.qml release_notes.qml Recommended.qml Requirements.qml img/squid.png img/chevron-left-solid.svg img/language-icon-48px.png calamares-3.2.41.1/src/qml/000077500000000000000000000000001410275732300152545ustar00rootroot00000000000000calamares-3.2.41.1/src/qml/calamares/000077500000000000000000000000001410275732300172045ustar00rootroot00000000000000calamares-3.2.41.1/src/qml/calamares/CMakeLists.txt000066400000000000000000000034331410275732300217470ustar00rootroot00000000000000# === 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" ) set( QML_DIR share/calamares/qml ) set( QML_MODULE_DESTINATION ${QML_DIR}/calamares/${SUBDIRECTORY} ) # We glob all the files inside the subdirectory, and we make sure they are # synced with the bindir structure and installed. file( GLOB QML_MODULE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY} "${SUBDIRECTORY}/*" ) foreach( QML_MODULE_FILE ${QML_MODULE_FILES} ) if( NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIRECTORY}/${QML_MODULE_FILE} ) configure_file( ${SUBDIRECTORY}/${QML_MODULE_FILE} ${SUBDIRECTORY}/${QML_MODULE_FILE} COPYONLY ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBDIRECTORY}/${QML_MODULE_FILE} DESTINATION ${QML_MODULE_DESTINATION} ) endif() endforeach() message( "-- ${BoldYellow}Configured QML module: ${BoldRed}calamares.${SUBDIRECTORY}${ColorReset}" ) endif() endforeach() message( "" ) calamares-3.2.41.1/src/qml/calamares/slideshow/000077500000000000000000000000001410275732300212055ustar00rootroot00000000000000calamares-3.2.41.1/src/qml/calamares/slideshow/BackButton.qml000066400000000000000000000005771410275732300237650ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ NavButton { id: backButton anchors.left: parent.left visible: parent.currentSlide > 0 isForward: false } calamares-3.2.41.1/src/qml/calamares/slideshow/ForwardButton.qml000066400000000000000000000006071410275732300245230ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ NavButton { id: forwardButton anchors.right: parent.right visible: parent.currentSlide + 1 < parent.slides.length; } calamares-3.2.41.1/src/qml/calamares/slideshow/NavButton.qml000066400000000000000000000027021410275732300236410ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /* This is a navigation (arrow) button that fades in on hover, and * which calls forward / backward navigation on the presentation it * is in. It should be a child item of the presentation (not of a * single slide). Use the ForwardButton or BackButton for a pre- * configured instance that interacts with the presentation. */ 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 from: fade.opacity to: 1.0 duration: 500 running: false } OpacityAnimator { id: fadeOut target: fade from: fade.opacity to: 0.3 duration: 250 running: false } MouseArea { anchors.fill: parent hoverEnabled: true onEntered: { fadeOut.running = false; fadeIn.running = true } onExited: { fadeIn.running = false ; fadeOut.running = true } onClicked: { if (isForward) fade.parent.goToNextSlide() else fade.parent.goToPreviousSlide() } } } calamares-3.2.41.1/src/qml/calamares/slideshow/Presentation.qml000066400000000000000000000213031410275732300243720ustar00rootroot00000000000000/* === This file is part of Calamares - === * * 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 * 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 * 2019, Adriaan de Groot * - Support "V2" loading * - Disable shortcuts until the content is visible in Calamares * 2020, Adriaan de Groot * - Updated to SPDX headers */ /**************************************************************************** ** ** 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$ ** ****************************************************************************/ import QtQuick 2.5 import QtQuick.Window 2.0 Item { id: root property variant slides: [] property int currentSlide: 0 property bool loopSlides: true property bool showNotes: false; property bool allowDelay: true; property alias mouseNavigation: mouseArea.enabled property bool arrowNavigation: true property bool keyShortcutsEnabled: true property color titleColor: textColor; property color textColor: "black" property string fontFamily: "Helvetica" property string codeFontFamily: "Courier New" // This is set by the C++ part of Calamares when the slideshow // becomes visible. You can connect it to a timer, or whatever // else needs to start only when the slideshow becomes visible. // // 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 Component.onCompleted: { var slideCount = 0; var slides = []; for (var i=0; i 0) root.slides[root.currentSlide].visible = true; } function switchSlides(from, to, forward) { from.visible = false to.visible = true return true } onCurrentSlideChanged: { switchSlides(root.slides[_lastShownSlide], root.slides[currentSlide], currentSlide > _lastShownSlide) _lastShownSlide = currentSlide // Always keep focus on the slideshow root.focus = true } function goToNextSlide() { if (root.slides[currentSlide].delayPoints) { if (root.slides[currentSlide]._advance()) return; } if (currentSlide + 1 < root.slides.length) ++currentSlide; else if (loopSlides) currentSlide = 0; // Loop at the end } function goToPreviousSlide() { if (currentSlide - 1 >= 0) --currentSlide; else if (loopSlides) currentSlide = root.slides.length - 1 } focus: true // Keep focus // Navigation through key events, too Keys.onSpacePressed: goToNextSlide() Keys.onRightPressed: goToNextSlide() Keys.onLeftPressed: goToPreviousSlide() // navigate with arrow keys Shortcut { sequence: StandardKey.MoveToNextLine; enabled: root.activatedInCalamares && root .arrowNavigation; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousLine; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } Shortcut { sequence: StandardKey.MoveToNextChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousChar; enabled: root.activatedInCalamares && root.arrowNavigation; onActivated: goToPreviousSlide() } // presentation-specific single-key shortcuts (which interfere with normal typing) Shortcut { sequence: " "; enabled: root.activatedInCalamares && root.keyShortcutsEnabled; onActivated: goToNextSlide() } // standard shortcuts Shortcut { sequence: StandardKey.MoveToNextPage; enabled: root.activatedInCalamares; onActivated: goToNextSlide() } Shortcut { sequence: StandardKey.MoveToPreviousPage; enabled: root.activatedInCalamares; onActivated: goToPreviousSlide() } MouseArea { id: mouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { if (mouse.button == Qt.RightButton) goToPreviousSlide() else goToNextSlide() } onPressAndHold: goToPreviousSlide(); //A back mechanism for touch only devices } Window { id: notesWindow; width: 400 height: 300 title: "QML Presentation: Notes" visible: root.showNotes Flickable { anchors.fill: parent contentWidth: parent.width contentHeight: textContainer.height Item { id: textContainer width: parent.width height: notesText.height + 2 * notesText.padding Text { id: notesText property real padding: 16; x: padding y: padding width: parent.width - 2 * padding font.pixelSize: 16 wrapMode: Text.WordWrap property string notes: root.slides[root.currentSlide].notes; onNotesChanged: { var result = ""; var lines = notes.split("\n"); var beginNewLine = false for (var i=0; i 0) result += " "; result += line; } } if (result.length == 0) { font.italic = true; text = "no notes.." } else { font.italic = false; text = result; } } } } } } } calamares-3.2.41.1/src/qml/calamares/slideshow/Slide.qml000066400000000000000000000153221410275732300227630ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2012 Digia Plc and/or its subsidiary(-ies). * SPDX-License-Identifier: LGPL-2.1-only */ /**************************************************************************** ** ** 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$ ** ****************************************************************************/ import QtQuick 2.5 Item { /* Slides can only be instantiated as a direct child of a Presentation {} as they rely on several properties there. */ id: slide property bool isSlide: true; property bool delayPoints: false; property int _pointCounter: 0; function _advance() { if (!parent.allowDelay) return false; _pointCounter = _pointCounter + 1; if (_pointCounter < content.length) return true; _pointCounter = 0; return false; } property string title; property variant content: [] property string centeredText property string writeInText; property string notes; property real fontSize: parent.height * 0.05 property real fontScale: 1 property real baseFontSize: fontSize * fontScale property real titleFontSize: fontSize * 1.2 * fontScale property real bulletSpacing: 1 property real contentWidth: width // Define the slide to be the "content area" x: parent.width * 0.05 y: parent.height * 0.2 width: parent.width * 0.9 height: parent.height * 0.7 property real masterWidth: parent.width property real masterHeight: parent.height property color titleColor: parent.titleColor; property color textColor: parent.textColor; property string fontFamily: parent.fontFamily; property int textFormat: Text.PlainText visible: false Text { id: titleText font.pixelSize: titleFontSize text: title; anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.top anchors.bottomMargin: parent.fontSize * 1.5 font.bold: true; font.family: slide.fontFamily color: slide.titleColor horizontalAlignment: Text.Center z: 1 } Text { id: centeredId width: parent.width anchors.centerIn: parent anchors.verticalCenterOffset: - parent.y / 3 text: centeredText horizontalAlignment: Text.Center font.pixelSize: baseFontSize font.family: slide.fontFamily color: slide.textColor wrapMode: Text.Wrap } Text { id: writeInTextId property int length; font.family: slide.fontFamily font.pixelSize: baseFontSize color: slide.textColor anchors.fill: parent; wrapMode: Text.Wrap text: slide.writeInText.substring(0, length); NumberAnimation on length { from: 0; to: slide.writeInText.length; duration: slide.writeInText.length * 30; running: slide.visible && parent.visible && slide.writeInText.length > 0 } visible: slide.writeInText != undefined; } Column { id: contentId anchors.fill: parent Repeater { model: content.length Row { id: row function decideIndentLevel(s) { return s.charAt(0) == " " ? 1 + decideIndentLevel(s.substring(1)) : 0 } property int indentLevel: decideIndentLevel(content[index]) property int nextIndentLevel: index < content.length - 1 ? decideIndentLevel(content[index+1]) : 0 property real indentFactor: (10 - row.indentLevel * 2) / 10; height: text.height + (nextIndentLevel == 0 ? 1 : 0.3) * slide.baseFontSize * slide.bulletSpacing x: slide.baseFontSize * indentLevel visible: (!slide.parent.allowDelay || !delayPoints) || index <= _pointCounter Rectangle { id: dot anchors.baseline: text.baseline anchors.baselineOffset: -text.font.pixelSize / 2 width: text.font.pixelSize / 3 height: text.font.pixelSize / 3 color: slide.textColor radius: width / 2 opacity: text.text.length == 0 ? 0 : 1 } Item { id: space width: dot.width * 1.5 height: 1 } Text { id: text width: slide.contentWidth - parent.x - dot.width - space.width font.pixelSize: baseFontSize * row.indentFactor text: content[index] textFormat: slide.textFormat wrapMode: Text.WordWrap color: slide.textColor horizontalAlignment: Text.AlignLeft font.family: slide.fontFamily } } } } } calamares-3.2.41.1/src/qml/calamares/slideshow/SlideCounter.qml000066400000000000000000000013671410275732300243270ustar00rootroot00000000000000/* === This file is part of Calamares - === * * SPDX-FileCopyrightText: 2018 Adriaan de Groot * SPDX-License-Identifier: GPL-3.0-or-later * * Calamares is Free Software: see the License-Identifier above. * */ /* This control just shows a (non-translated) count of the slides * in the slideshow in the format "n / total". */ import QtQuick 2.5; Rectangle { id: slideCounter anchors.right: parent.right anchors.bottom: parent.bottom width: 100 height: 50 Text { id: slideCounterText anchors.centerIn: parent //: slide counter, %1 of %2 (numeric) text: qsTr("%L1 / %L2").arg(parent.parent.currentSlide + 1).arg(parent.parent.slides.length) } } calamares-3.2.41.1/src/qml/calamares/slideshow/qmldir000066400000000000000000000003241410275732300224170ustar00rootroot00000000000000module calamares.slideshow Presentation 1.0 Presentation.qml Slide 1.0 Slide.qml NavButton 1.0 NavButton.qml ForwardButton 1.0 ForwardButton.qml BackButton 1.0 BackButton.qml SlideCounter 1.0 SlideCounter.qml calamares-3.2.41.1/src/qml/calamares/slideshow/qmldir.license000066400000000000000000000000741410275732300240420ustar00rootroot00000000000000SPDX-FileCopyrightText: no SPDX-License-Identifier: CC0-1.0